9度OJ 教程82 拓扑排序之《产生冠军》

九度OJ 教程82 拓扑排序之《产生冠军》

题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=104


//九度OJ 教程82 拓扑排序之《产生冠军》
//http://ac.jobdu.com/problem.php?cid=1040&pid=81
#include<stdio.h>
#include<string.h>
#define MAXS 1002
char name[MAXS][40];
int count;
int findnum(char *h)
{
	int i,j,k,flag=1;
	for(i=1;i<count&&flag;i++)
	{
		if(strcmp(name[i],h)==0)flag=0;
	}
	if(flag==0)return (i-1);
	else 
	{
		strcpy(name[count++],h);
		return (count-1);
	}
}
int main()
{
	char h1[40],h2[40];
	int a,b,i,j,n,mark[MAXS][MAXS],sum;
	while(~scanf("%d",&n)&&n)
	{
		count=1;
		memset(mark,0,MAXS*MAXS*sizeof(int));
		while(n--)
		{
			scanf("%s %s",h1,h2);
			a=findnum(h1);
			b=findnum(h2);
			mark[a][b]=1;
			mark[0][b]++;//mark[0][k]表示第k位选手被击败的次数。
		}//while
		for(i=1,sum=0;i<count;i++)if(mark[0][i]==0)sum++;
		if(sum==1)printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}