3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0
Yes No
从数据结构的角度来说,要生成树只有一颗,且只有一个根节点;
而对于节点,我们可以考虑入度/出度,只有一个根节点,即只有一个入度为0的节点。
我的代码如下:
#include <stdio.h> #include <string.h> typedef struct Node{ char a[20]; int pri = 0; }; int main() { int coun = 0; Node s[1000]; int n; while(scanf("%d", &n), n) { coun = 0; for(int i=0; i<n; i++) { strcpy(s[i].a,"\0"); s[i].pri = 0; } getchar(); int temp = n; while(temp--) { bool flag1 = true,flag2 = true; char s1[20], s2[20]; scanf("%s%s", s1, s2); getchar(); int i; for(i=0; i<2*n; i++) { if(s[i].a[0]=='\0') break; if(!strcmp(s1,s[i].a)) flag1 = false; if(!strcmp(s2,s[i].a)) {s[i].pri++;flag2=false;} } if(flag1) strcpy(s[i].a,s1); if(!flag1&&flag2) {strcpy(s[i].a,s2);s[i].pri++;} else if(flag1&&flag2) {strcpy(s[i+1].a,s2);s[i+1].pri++;} } for(int i=0; i<2*n; i++) { if(s[i].a[0]=='\0') break; if(s[i].pri==0) coun++; } if(coun==1) printf("Yes\n"); else printf("No\n"); } return 0; }