[HDU] 2094 产生冠军(拓扑排序+map)

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

注意每组数据处理前,map要清空。

 1 #include<cstdio>

 2 #include<iostream>

 3 #include<string.h>

 4 #include<algorithm>

 5 #include<math.h>

 6 #include<stdbool.h>

 7 #include<time.h>

 8 #include<stdlib.h>

 9 #include<set>

10 #include<map>

11 #include<stack>

12 #include<queue>

13 #include<vector>

14 using namespace std;

15 #define clr(x,y)    memset(x,y,sizeof(x))

16 #define sqr(x)      ((x)*(x))

17 #define rep(i,a,b)  for(int i=(a);i<=(b);i++)

18 #define LL          long long

19 #define INF         0x3f3f3f3f

20 #define A           first

21 #define B           second

22 const int N=1000+131;

23 int   n,cnt,num,t,head[N],f[N],d[N];

24 char  a[N],b[N];

25 map<string,int> all;

26 

27 void init()

28 {

29     num=0;

30     clr(d,0);

31     all.clear();

32 }

33 void solve()

34 {

35     int p=0;

36     for(int i=1;i<=num;i++) {

37         if(!d[i]) p++;

38     }

39     if(p!=1) printf("No\n");

40     else     printf("Yes\n");

41     

42 }

43 int main()

44 {

45     while(~scanf("%d",&n)) {

46         if(!n) break;

47         getchar();

48         init();

49         while(n--) {

50             scanf("%s%s",a,b);

51             if(!all[a]) all[a]=++num;

52             if(!all[b]) all[b]=++num;

53             d[all[b]]++;

54         }

55         solve();

56     }

57    

58     return 0;

59 }

 

你可能感兴趣的:(map)