有点拓扑排序的意思,只要入度为0的点有一个就可以产生冠军
#include<stdio.h>
#include<string.h>
struct op
{
char name[50];
int in;
}p[1010];
int main()
{
int i,j,n,num;
char ch1[50],ch2[50];
while(scanf("%d",&n)!=-1&&n)
{
num=2;
scanf("%s%s",p[0].name,p[1].name);
p[0].in=0;p[1].in=1;
for(i=1;i<n;i++)
{
scanf("%s%s",ch1,ch2);
for(j=0;j<num;j++)
{
if(strcmp(ch1,p[j].name)==0)
break;
}
if(j==num)
{
strcpy(p[num].name,ch1);
p[num++].in=0;
}
for(j=0;j<num;j++)
{
if(strcmp(ch2,p[j].name)==0)
break;
}
if(j<num)p[j].in++;
else
{
strcpy(p[num].name,ch2);
p[num++].in=1;
}
}
int sum=0;
for(i=0;i<num;i++)
if(p[i].in==0)
sum++;
if(sum==1)puts("Yes");
else puts("No");
}
return 0;
}