题目链接:hdu 2094 产生冠军
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#define maxn 11111
using namespace std;
int in[maxn],n;
int vis[maxn];
int main()
{
string a,b;
while(~scanf("%d",&n),n)
{
map<string,int>mapp;
int cnt = 0;
fill(vis,vis+maxn,0);
for(int i=0;i<n;i++)
{
cin>>a>>b;
if(!mapp[a]) mapp[a]=++cnt;//cnt表示当前人的标号
if(!mapp[b]) mapp[b]=++cnt;
vis[mapp[b]]=1;//该标号的人失败,则标记为1
}
int sum = 0;
for(int i=1;i<=cnt;i++) sum+=vis[i];//cnt为总人数,sum为失败过的人数
if(cnt==sum+1) cout<<"Yes"<<endl;//如果失败过的人数等于总人数减一,也就是只有一个人没有失败过
else cout<<"No"<<endl;
}
return 0;
}