HDOJ2094 拓扑排序 STL中set和map的应用 产生冠军
2015-12-18 09:53
316 查看
产生冠军
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12372 Accepted Submission(s): 5732
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
#include #include #include #include #include using namespace std; int main () { set s; set::iterator it; map m; string a, b; int t; while (cin >> t, t) { s.clear(); m.clear(); while (t--) { cin >> a >> b; s.insert(a); s.insert(b); m[b] = a; } int i; for (i = 0, it = s.begin(); it != s.end(); ++it) { if (m[*it].length() == 0)//统计有多少个图的出口 i ++; } puts((i == 1) ? "Yes" : "No");//只有一个出口则为所求 } return 0; }
相关文章推荐
- 增删改查
- oracle 赋予、回收账户权限
- 工作一年多了,跳槽,总结下最近面试面试官经常提到的问题,希望能帮到大家
- 帧率、码流与分辨率相关知识
- HDOJ2019 数列有序
- 自定义图片形状
- Django 设置template的全局变量
- 解决乱码
- [转]最新版SDWebImage的使用
- 不可摸数
- 关系型数据库 (数据库类型)
- Cookie简单是现自动登陆功能
- Alamofire json Alamofire2.0使用
- 双网卡双IP同时连通
- [IOS 开发] 获取当前设备可用内存及所占内存
- java中的三个引用类 SoftReference, WeakReference 和 PhantomReference的区别
- ubuntu开机自动项详解
- VC小技巧收集————如何修改窗口标题
- Web系统开发构架再思考-前后端的完全分离
- 获取tableViewcell副标题的方法