产生冠军

include<stdio.h>

include

include

include

include<string.h>

include

include

using namespace std;
///找出入度为0的有且只有一个即可以产生冠军,不用拓扑排序
int du[2005];
bool panDuan(int n)///判断所有点的入度为0的个数
{
int sum=0;
for(int i=1; i<=n; i++)
if(du[i]0)
{
sum++;
if(sum>=2)return false;
}
if(sum
1)return true;
else return false;
}
int main()
{
int n;
while(scanf("%d",&n),n)
{
string a,b;
map<string,int >m;///将人名映射成一个编号
memset(du,0,sizeof(du));
int k=0;
for(int i=1; i<=n; i++)
{
cin>>a >>b;
if(m[a]0)m[a]=++k;///没有赋值之前初始值是0
if(m[b]
0)m[b]=++k;
du[m[b]]++;///入度加一

    }
    if(panDuan(k))printf("Yes
");
    else printf("No
");
}
return 0;

}

梦里不知身是客,一晌贪欢。
原文地址:https://www.cnblogs.com/dccmmtop/p/5499487.html