题意:给你一些比赛情况,看能否产生冠军
思路:拓扑排序,给每个字符串编一个号,然后就是建图,只要找到入度为0的点并且只有一个那就能产生冠军,否则不行
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
char str[2005][100];
int num[2005];
int s_count = 0;
int find(char *s)
{
int i,len = strlen(s);
for(i = 0; i < s_count; i++)
{
if(strcmp(s,str[i]) == 0)
return i;
}
strcpy(str[s_count],s);
return s_count++;
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
int i;
if(n == 0)
break;
char s1[100],s2[100];
s_count = 0;
memset(num,0,sizeof(num));
for(i = 0; i < n; i++)
{
scanf("%s%s",s1,s2);
find(s1);
int t = find(s2);
num[t]++;
}
int sum = 0;
for(i = 0; i < s_count; i++)
{
if(!num[i])
sum++;
}
if(sum == 1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
本文探讨了如何通过拓扑排序算法,从给定的比赛情况中判断是否能产生唯一的冠军。详细介绍了算法步骤,包括字符串编号、建图及判断唯一冠军的条件。
1358

被折叠的 条评论
为什么被折叠?



