码迷,mamicode.com
首页 > 编程语言 > 详细

HDU 2094 拓扑排序

时间:2015-10-22 00:17:42      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

产生冠军

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 12031    Accepted Submission(s): 5583

Problem Description
有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。 如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。 根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。
 
Input
输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。
 
 

 
Output
对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。
 
Sample Input
3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0
 
Sample Output
Yes No
 
今天刚刚学习拓扑排序  最主要的就是入度为零的点的寻找 尤其是这个题目 输入存储 是一个难点  我这种一直使用map  其实也算是一种方法
只有一个入度为零的点 就可以产生冠军!!!!
重新开始写博客吧!!
 
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 map<string,int>in;
 4 map<string,map<string,int> >mp;
 5 map<int,string>dis;
 6 map<string,int>pis;
 7 queue<string> q;
 8 int main()
 9 {
10     int n;
11     int coun;
12     while(scanf("%d",&n)!=EOF)
13     {
14         if(n==0)
15             break;
16         in.clear();mp.clear();
17         dis.clear();pis.clear();
18         coun=1;
19         string str1,str2;
20         for(int i=1; i<=n; i++)
21         {
22             cin>>str1>>str2;
23             if(pis[str1]==0)
24             {
25                 pis[str1]=1;
26                 dis[coun++]=str1;
27             }
28             if(pis[str2]==0)
29             {
30                 pis[str2]=1;
31                 dis[coun++]=str2;
32             }
33             if(mp[str1][str2]==0)
34             {
35                 mp[str1][str2]=1;
36                 in[str2]++;
37             }
38         }
39         int flag=0;
40         for(int i=1;i<coun;i++)
41         {
42             if(in[dis[i]]==0)
43             {
44                 flag++;
45                 q.push(dis[i]);
46             }
47         }
48         if(flag==1)
49             printf("Yes\n");
50         else
51             printf("No\n");
52 }
53 return 0;
54 }

HDU 2094 拓扑排序

标签:

原文地址:http://www.cnblogs.com/hsd-/p/4899447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!