题目连接。
分析:
想了很多很多。全部WA了。。没想到是找入度为0的点。。如果个数为1个Yes,否则No。。(因为这题仅仅是找冠军而已)
#include <stdio.h> #include <string.h> #define MAXN 1005 int n, top_name, indegree[MAXN]; char name[MAXN][15]; void Init(){ top_name = 0; memset(indegree, 0, sizeof(indegree)); } int find_str(char *s){ int i; for(i=0; i<top_name; i++){ if(strcmp(name[i], s) == 0) break; } if(i==top_name){ strcpy(name[top_name++], s); } return i; } int main(){ int i, k, cnt, pos1, pos2; char s1[15], s2[15]; while(scanf("%d", &n) == 1 && n){ Init(); for(i=0; i<n; i++){ scanf("%s %s", s1, s2); pos1 = find_str(s1), pos2 = find_str(s2); indegree[pos2]++; } cnt = 0; for(i=0; i<top_name; i++){ if(indegree[i] == 0){k = i; cnt++;} if(cnt > 1) break; } if(cnt == 1) printf("Yes\n"); else printf("No\n"); } return 0; }