hduoj2094产生冠军



产生冠军

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 8541    Accepted Submission(s): 4019

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

思路:只要某人输过一次,就不可能是冠军,因此,可以将赢的人放到集合1,把输的人放到集合2,然后将集合2的人从集合1中全部去掉,然后判断集合1中剩余多少人,

如果集合1空,则没有认识冠军,如果集合1有1个以上的元素,则可能有多个人是冠军,亦不满足题意!

知识点:STL

#include<iostream>
#include<string>
#include<set>
#include<cstdio>
using namespace std;
int main()
{
    set<string>shu,ying;
    string a1,a2;
    int i,n;
    set<string>::iterator k;
    while(scanf("%d",&n),n)
    {
        shu.clear();
        ying.clear();
        for(i=1;i<=n;i++)
        {
            cin>>a1>>a2;
            ying.insert(a1);
            shu.insert(a2);
        }
        for(k=shu.begin();k!=shu.end();k++)
        {
            if(ying.count(*k))
                ying.erase(*k);
        }
        if(ying.size()==1)
            printf("Yes\n");
        else
        printf("No\n");
    }
    return 0;
}

hduoj2094产生冠军

时间: 2024-09-29 03:01:05

hduoj2094产生冠军的相关文章

荣耀的双十一:为冠军而来

前些日子,第三方数据机构发布报告指出华为手机在出货量方面已经赶超小米,之后又有知名自媒体指出,荣耀仅2014年第一年的销量就达到2000万部,而2015年更是只用半年时间就达到2000万部销量.该自媒体指出,华为在2015年的销量将会铁定超越1亿部,而按照目前发展速度来看,未来荣耀或将实现单品牌赶超小米的速度. 这种磅礴而凶猛的发展势头,使得荣耀对双十一也信心满满. 10月30日,荣耀官方微博发布消息,内容和配图均以"为冠军而来"为口号,力图抢夺双十一手机销量冠军的意图可见一斑.除此之

从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。

附:世界杯冠军以及对应的夺冠年份,请参考本章附录. 附录 历届世界杯冠军 届数 举办年份 举办地点 冠军 第一届 1930年 乌拉圭 乌拉圭 第二届 1934年 意大利 意大利 第三届 1938年 法国 意大利 第四届 1950年 巴西 乌拉圭 第五届 1954年 瑞士 西德 第六届 1958年 瑞典 巴西 第七届 1962年 智利 巴西 第八届 1966年 英格兰 英格兰 第九届 1970年 墨西哥 巴西 第十届 1974年 前西德 西德 第十一届 1978年 阿根廷 阿根廷 第十二届 198

HDU 2094 产生冠军 hash 水题

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

hdu 2094 产生冠军

题意:给出n对选手姓名,每对表示前者赢后者,求整场比赛是否有冠军: 思路:将名字用数字表示,离散化,然后就是裸裸的拓扑排序,只需判断初始时入度为0的是否唯一: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,i,j,k,con; int mm[1001][1001],indegree[500010]; char s1[500010],s2[500010

读书笔记:《冠军记忆术》

读书笔记:<冠军记忆术> 这本书是在北京出差时买的,一些记忆书都是外国人写的,里面的一些联想方法与中国人的习惯不太一样,这本书是一个中国人合著的,所以就买下看看了. 参加工作的人更讲究逻辑思维,不必强行记住一大堆的材料了,并且经常随身带着手机,连着3G网络,而作为学生来说,有大量的记忆任务,还是值得一学的. 一开始的关于GQ记忆熵的测试直接跳过去了,对于没有学过记忆术的人来说,这些测试是一场折磨. 第1章:我们的大脑:令人惊奇的数据存储器 大脑功能发挥的程度如何,取决于大脑的硬件和软件接收.存

HDU 产生冠军 2094

解题思路:这题重在分析,可能你知道的越多,这题想得越多,什么并查集,什么有向图等. 事实是,我们会发现,只要找到一个,并且仅有一个的入度为0的点,说明可以找出   冠军.若入度为0的点一个都没有,说明每个选手都是输过的:若入度为0的点超过一个, 说明多个对应的入度为0的点的关系是不确定的,也不能产生冠军. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std;

2768: [JLOI2010]冠军调查( 最小割 )

最小割... 怎么乱搞都可以 -------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i, n ) for( int i = 0; i < n; ++i ) #define R

hdu2094——产生冠军

产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9274    Accepted Submission(s): 4359 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打

BZOJ-2768: [JLOI2010]冠军调查(超级裸的最小割)

2768: [JLOI2010]冠军调查 Time Limit: 10 Sec  Memory Limit: 128 MB Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教育学院进行了一次大规模的调查,调查的内容就是关于切尔西能否在今年问鼎欧洲冠军.新浪体育的记者从各个院系中一共抽取了n位同学作为参与者,大家齐聚一堂,各抒己见.每一位参与者都将发言,阐述自己的看法.参与者的心里都有一个看法,比如