产生冠军

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

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
set 题解:总人数减去失败的人等于一 ,也就是只有一个人没失败过;handsome借此总结了一条名言:打败最吊的人,你就最吊了,哪怕这个吊人赢得再多;一组数据就可以验证此句名言:
a b
a c
a d
a x
g a
答案为6-5=1;g最吊;;;;;;
代码:
 #include<cstdio>
#include<iostream>
#include<string>
#include<set>
using namespace std;
int main(){int n;string a,b;
while(scanf("%d",&n),n){
set<string>tot;
set<string>looser;
while(n--)cin>>a>>b,tot.insert(a),tot.insert(b),looser.insert(b);
if(tot.size()-looser.size()==)puts("Yes");
else puts("No");
}
return ;
}

map题解:胜利的每次+1,失败的直接赋值无穷小;最后判断为正的个数是否为一;

代码:

 #include<iostream>
#include<map>
#include<string>
#define INF -0xffff
using namespace std;
int main(){
map<string,int>player;//注意由于下面是player[a],a,b是字符串,所以string在前;
map<string,int>::iterator iter;//
string a,b;int n,flot;
while(scanf("%d",&n),n){player.clear();flot=;
while(n--)cin>>a>>b,player[a]++,player[b]=INF;
for(iter=player.begin();iter!=player.end();iter++){
if(iter->second>=)flot++;
}
if(flot==)puts("Yes");
else puts("No");
}
return ;
}

拓扑结构+邻接表:

 #include<string.h>
#include<queue>
#include<map>
#include<string>
#include<stdio.h>
using namespace std;
const int MAXN=;
int que[MAXN];
struct Node{
int to,next;
};
Node edg[MAXN];
int head[MAXN];
map<string,int>mp;
int k;
priority_queue<int,vector<int>,greater<int> >dl;
void topu(){
for(int i=;i<k;i++){
if(!que[i])dl.push(i);
}
if(dl.size()==)puts("Yes");
else puts("No");
}
void initial(){
memset(head,-,sizeof(head));
memset(que,,sizeof(que));
mp.clear();
while(!dl.empty())dl.pop();
k=;
}
int main(){
int n;
char s1[],s2[];
while(~scanf("%d",&n),n){
initial();
for(int i=;i<n;i++){
scanf("%s%s",s1,s2);
if(!mp.count(s1))mp[s1]=k++;
if(!mp.count(s2))mp[s2]=k++;
edg[i].to=mp[s2];
edg[i].next=head[mp[s1]];
head[mp[s1]]=i;
que[mp[s2]]++;
}
topu();
}
return ;
}

产生冠军(set,map,拓扑结构三种方法)的更多相关文章

  1. Java原来如此-遍历Map的三种方法

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; pub ...

  2. 【Golang 接口自动化07】struct转map的三种方式

    背景 我们在前面介绍过怎么使用net/http发送json或者map数据,那么它能不能直接发送结构体数据呢?我们今天一起来学习结构体struct转map的三种方法,为后续做铺垫. struct转map ...

  3. Java中Map的三种遍历方法

    Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历.   告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...

  4. 两个Map的对比,三种方法,将对比结果写入文件。

    三种方法的思维都是遍历一个map的Key,然后2个Map分别取这2个Key值所得到的Value. #第一种用entry private void compareMap(Map<String, S ...

  5. map的三种遍历方法!

    map的三种遍历方法!   集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~ /* * To change this template, choose Tools | Te ...

  6. Spring使用jdbcJdbcTemplate和三种方法配置数据源

    三种方法配置数据源 1.需要引入jar包:spring-jdbc-4.3.2.RELEASE.jar <!-- spring内置,springJdbc,配置数据源 --> <bean ...

  7. Map的三种遍历方式

    对于Map的三种方式遍历 1.keySet() 2.values() 3.entrySet()三种方式得到Set之后,都可以使用 foreach或者iterator, 不能使用for,因为数据结构决定 ...

  8. 转载:遍历Map的四种方法

    http://www.cnblogs.com/kristain/articles/2033566.html 遍历Map的四种方法 public static void main(String[] ar ...

  9. struts2的action访问servlet API的三种方法

    学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object g ...

随机推荐

  1. JUnit4中的测试套件

    测试套件 JUnit3.8中,用测试套件同时运行多个测试类(http://www.cnblogs.com/mengdd/archive/2013/04/07/3006265.html). 在JUnit ...

  2. Mac截屏快捷键总结

    Mac截屏快捷键总结 1)Command-Shift-3: 将整个屏幕拍下并保存到桌面. 2)Command-Shift-Control-3:     将整个屏幕拍下并保存到剪贴板(Clipboard ...

  3. 通过winForm控制webForm的上传控件file的值

    文件上传是日常开发中经常遇到的,文件上传用的最多的当然是上传控件file了,一个form表单,其中有一点就是form表单的enctype属性设置为multipart/form-data,呵呵,这个在所 ...

  4. Hash表的扩容(转载)

    Hash表(Hash Table)   hash表实际上由size个的桶组成一个桶数组table[0...size-1] . 当一个对象经过哈希之后.得到一个对应的value , 于是我们把这个对象放 ...

  5. 计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.

    本书參照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html 前言: ...

  6. [置顶] Java中发邮件的6种方法

    1.官方标准JavaMail Sun(Oracle)官方标准,功能强大,用起来比较繁琐. 官方资料:http://www.oracle.com/technetwork/java/javamail/in ...

  7. Qt使用异或进行加密解密

          在加密,解密中,异或运算应该时比较简单的一种.下面的代码,采用异或运算进行加密,解密: 点击(此处)折叠或打开 #include <QtCore/QCoreApplication&g ...

  8. last与lastlog命令

    lastlog 列出所有用户最后登录的时间和登录终端的地址,如果此用户从来没有登录,则显示:**Never logged in**last 列出用户所有的登录时间和登录终端的地址

  9. MySQL 触发器的定义

    -- Insert DELIMITER $$ USE `testdatabase`$$ DROP TRIGGER /*!50032 IF EXISTS */ `Trigger_XXX_INSERT`$ ...

  10. T4模板试水篇1_入门

    T4模板作为VS自带的一套代码生成器,功能有多强大我也不知道,最近查找了一些资料学习一下,做个笔记 更详细的资料参见: MSDN: http://msdn.microsoft.com/zh-cn/li ...