九度OJ 教程82 拓扑排序之《产生冠军》
[csharp]
//九度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;
}
补充:软件开发 , C++ ,