标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 2596 | Accepted: 1046 |
Description
Input
Output
Sample Input
START 1 2 1 END START 0 5 1 2 2 3 3 4 4 END START 0 10 1 9 2 3 4 5 6 7 8 9 END ENDOFINPUT
Sample Output
YES 1 NO YES 10
题目链接:http://poj.org/problem?id=1300
题意:有很多房间,编号为0,1,2,3,...。输入m,n。m为起始房间号;n为房间总数(1≤n≤20)。接下来n行列出了房间通向其他的房间号。(注意:空行也是输入,表示这个房间通向其他的房间号都已经出现了。)从m开始通过所有的门,通过后把门关上,关上了的门不能打开,最后回到0。
思路:最基础的欧拉通路的判断,判断是否是起点是m,终点是0的欧拉通路(默认是连通图)。主要要注意输入输出的格式。
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int door[30]; char s[100000]; int Init() { int len=0; char ch; while((ch=getchar())&&ch!=‘\n‘) { s[len++]=ch; } return len; } int main() { int i,j,m,n; int len; int ans=0; while(scanf("%s",s)!=EOF) { len=strlen(s); if(len==10) break; scanf("%d%d",&m,&n); getchar(); memset(door,0,sizeof(door)); ans=0; for(i=0; i<n; i++) { len=Init(); for(j=0; j<len; j++) { int num=0; while(j<len&&s[j]!=‘ ‘) { num=num*10+(s[j]-‘0‘); j++; } ans++; door[i]++; door[num]++; } } scanf("%s",s); int even=0,odd=0; for(i=0; i<n; i++) { if(door[i]%2==0) even++; else odd++; } if(odd==0&&m==0) cout<<"YES "<<ans<<endl; else if(odd==2&&m!=0&&door[0]%2!=0&&door[m]%2!=0) cout<<"YES "<<ans<<endl; else cout<<"NO"<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/GeekZRF/p/5459908.html