HDU 2094 拓扑排序

产生冠军

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 }
时间: 2024-10-10 04:29:09

HDU 2094 拓扑排序的相关文章

HDU 4857 拓扑排序 优先队列

n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得到的序列就是从大到小的,最后倒序输出就行了. 写这题的时候头好痛阿肚子好痛阿,再也不想熬夜了,一点效率都没有. /** @Date : 2017-09-29 19:29:12 * @FileName: HDU 4857 拓扑排序 + 优先队列.cpp * @Platform: Windows * @

HDU 5638 拓扑排序+优先队列

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 题意: 给你一个DAG图,删除k条边,使得能个得到字典序尽可能小的拓扑排序 题解: 把拓扑排序的算法稍微改一下,如果某个顶点的入度小于k也把它加到优先队列里面去. k减小后队列里面会有些点不满足<=k,直接踢出来就好了. 代码: #include<iostream> #include<cstring> #include<cstdio> #include<

hdu 2647 (拓扑排序 邻接表建图的模板) Reward

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员工的奖金多,老板满足了所以员工的这种心思,而且老板下午发的总工资最少,问最少是多少?比如 a b 表示a的工资比b要高(高一块钱),当出现a b   b c   c a这种环的时候输出-1 拓扑排序http://www.cnblogs.com/tonghao/p/4721072.html 小指向大

传递 hdu 5961 拓扑排序有无环~

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5961 题目为中文,这里就不描述题意了. 思路: 从题目陈述来看,他将一个有向图用一个邻接矩阵来表示,并且分为两个图P.Q,但是它们是有内在联系的,即:P+Q,抛去方向即为完全图. 题目都是中文,这里就不翻译了.我们可以从题目中知道,如果P.Q均满足传递性,那么P与(Q的反向图)生成的有向图应该无环. 所以,简单一个拓扑排序检查是否有环即可,P.Q合为一张图,跑一遍,这个还是很快的. 时长:3432MS

HDU 4324 (拓扑排序) Triangle LOVE

因为题目说了,两个人之间总有一个人喜欢另一个人,而且不会有两个人互相喜欢.所以只要所给的图中有一个环,那么一定存在一个三元环. 所以用拓扑排序判断一下图中是否有环就行了. 1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 2000 + 10; 5 char G[maxn][maxn]; 6 int c[maxn]; 7 int n; 8 9 bool dfs(int u) 10 { 11 c[u] = -1;

HDU 1325 拓扑排序

根据题目所给的3个不符合情况的条件,一个个判断图是否符合这3个条件即可 1.不能出现内部环,拓扑排序判断 2.不能有超过1个点的入度为0,因为只有一个树根 3.每个点最多一个入度 这里要注意的一点是这个点的数字是乱给的,所以最大值为8,但实际上不一定有8个点,这里记录一个最大值的参数,和一个总共点数的参数来进行判断即可 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using names

HDU 5438 拓扑排序+DFS

Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3234    Accepted Submission(s): 997 Problem Description Betty owns a lot of ponds, some of them are connected with other ponds by pipes, a

hdu 2647(拓扑排序)

Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7231    Accepted Submission(s): 2263 Problem Description Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wa

hdu 1811(拓扑排序+并查集)

Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7961    Accepted Submission(s): 2266 Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为 了更好的符合那些爱好者的喜好,Lele又想