http://acm.hdu.edu.cn/showproblem.php?pid=2094
3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0
Yes No#include <string.h> #include <stdio.h> #include <iostream> using namespace std; int map[1005][1005],into[1005]; int k; int topu() { for(int i=0;i<=k;i++) for(int j=1;j<=k;j++) { if(map[i][j]) into[j]++;//入度加一 } for(i=1;i<=k;i++) { if(into[i]==0) flag++; if(flag>1) return 0; } if(flag==0) return 0; return 1; } int main() { int x,y,flag1,flag2,n; string a,b,f[10005]; while(cin>>n&&n) { memset(map,0,sizeof(map); memset(into,0,sizeof(into)); k=0; while(n--) { flag1=flag2=0; cin >> a>>b; for(int i=1;i<=m;i++)//注意构图方式 { if(a==f[i]) { x=i; flag1=1; } if(b==f[i]) { y=i; flag2=1; } if(flag1&&flag2) break; } if(!flag1) { x=++k; f[k]=a; } if(!flag2) { y=++k; f[k]=b; } } if(topu()) printf("Yes\n"); else printf("No\n"); } return 0; }