找到入度为0的点,也就是说没输过的点,如果总数为1个就是唯一冠军,如果不唯一那么冠军不确定,输出-1;
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string.h>
#include<string>
#include<map>
using namespace std;
char ss[500],ss1[500];
int g[500][500];int indegree[500];
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
memset(g,0,sizeof(g));
memset(indegree,0,sizeof(indegree));
map<string,int>mp;
int cont=1;
for(int i=0;i<n;i++)
{
scanf("%s%s",ss,ss1);
if(!mp[ss])
mp[ss]=cont++;
if(!mp[ss1])
mp[ss1]=cont++;
// g[mp[ss]][mp[ss1]]=1;
indegree[mp[ss1]]++;
}
int sum=0;
//printf("%d...\n",cont);
for(int i=1;i<cont;i++)
{
if(!indegree[i])
sum++;
}
if(sum==1)
printf("Yes\n");
else printf("No\n");
}
}