HDU 2094 产生冠军

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

图论 拓扑排序 不过难点是输入的是字符 用STL map

View Code
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<map>
 5 using namespace std;
 6 map<string,int>p;
 7 int o[2001][2001],key[2001];
 8 char str1[100],str2[100];
 9 int main()
10 {
11     int i,j,k,n,num,z;
12     while(scanf("%d%*c",&n)!=EOF&&n!=0)
13     {
14         z=0;
15      memset(o,0,sizeof(o));
16      memset(key,0,sizeof(key));
17      p.clear();
18      num=1;
19      for(i=1;i<=n;i++)
20      {
21          scanf("%s%s",str1,str2);
22          if(p[str1]==0)
23          {
24              p[str1]=num;
25              num++;
26          }
27          if(p[str2]==0)
28          {
29              p[str2]=num;
30              num++;
31          }
32          j=p[str1];
33          k=p[str2];
34          if(!o[j][k])
35          {
36              o[j][k]=1;
37              key[k]++;
38          }
39      }
40      for(i=1;i<=num-1;i++)
41      if(!key[i])
42      {
43          z++;
44      }
45      if(z==1)
46      printf("Yes\n");
47      else
48      printf("No\n");
49     }
50     return 0;
51 
52 }
posted @ 2012-08-03 20:52  时光旅行的懒猫  阅读(196)  评论(0编辑  收藏  举报