hdu 2094 拓扑排序

来源:互联网 发布:android 打开移动网络 编辑:程序博客网 时间:2024/06/05 14:53

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2094

拓扑排序的思想,但是不需要进行拓扑排序。如果产生了冠军,说明只有一个人一场都没有输,其他人都输了一场。否则就没有产生冠军。

#include<cstdio>#include<iostream>#include<map>#define maxn 1005using namespace std;int win[maxn];int fail[maxn];int n;int main(){    while(scanf("%d",&n)&&n)    {        int i=1;        map<string,int>m;        string s1,s2;        for(int x=0;x<maxn;x++)            win[x]=fail[x]=0;     while(n--)      {       cin>>s1>>s2;        if(m.find(s1)==m.end())          m[s1]=i,i++;          if(m.find(s2)==m.end())          m[s2]=i,i++;          win[m[s1]]++;          fail[m[s2]]++;      }      int ans=0,x;      for(x=1;x<i;x++)      {          if(fail[x]==0)            ans++;          if(ans>1) break;      }      if(x==i&&ans==1) //只有一个人没有输一场,其他人都输了        printf("Yes\n");      else        printf("No\n");    }}
原创粉丝点击