这样的拓扑排序,唉,不好玩。。。
#include <stdio.h>
#include <string.h>
struct Player{
char name[100];
int indegree;
}p[1001];
int main()
{
int n;
while(scanf("%d\n",&n) != EOF && n != 0){
int cnt = 0;
for(int i = 0 ; i < n ; ++i){
char p1[100] , p2[100];
bool flag1 = false, flag2 = false;
scanf("%s%s",p1,p2);
for(int j = 0 ; j < cnt ; ++j){
if( strcmp(p1,p[j].name) == 0){
flag1 = true;
}
if( strcmp(p2,p[j].name) == 0){
p[j].indegree++;
flag2 = true;
break;
}
}
if(flag1 == false){
strcpy(p[cnt].name , p1);
p[cnt++].indegree = 0;
}
if(flag2 == false){
strcpy(p[cnt].name,p2);
p[cnt++].indegree = 1;
}
}
int ans = 0;
for(int i = 0 ; i < cnt ; ++i){
if(p[i].indegree == 0)
ans++;
}
if(ans == 1) printf("Yes\n");
else printf("No\n");
}
return 0;
}