解题报告:有一群人在打乒乓球比赛,需要在这一群人里面选出一个冠军,现在规定,若a赢了b,b又赢了c那么如果a与c没有比赛的话,就默认a赢了c,而如果c赢了a的话,则这三个人里面选不出冠军,还有就是如果一个人没有输给别人,但是存在一个人跟这个人之间的输赢关系不能确定的话,也是作为选不出冠军的情况,现在输入一群人的比赛情况,要你确定,利用这组比赛情况能不能确定一个冠军,能的话输出Yes,否则输出No。

感觉这题应该有很多种不同的解法,其中由于输入的是选手的名字,所以还要用到map容器。我的做法是枚举每一个人是否有可能是冠军,即从这个人开始出发,用dfs搜索,看这个人一共赢了多少个人,然后他赢的人的个数是否是总的比赛的人数M-1,如果是,则说明他就是冠军,如果枚举每一个人都不满足的话,则说明没有冠军。要注意的是,

这样做有很多情况可以减掉,第一,如果某个人;有过输给别人的记录,则这个人可以直接跳过,不需要看他赢了多少人,这样可以减掉一大部分,然后每次已经搜过的要标记掉,即已经被人打败过的要标记掉,要不然如果两个人都同时赢了同一个人的话,则这个人将会被统计两次。代码贴上:

 #include<cstdio>
#include<cstring>
#include<map>
#include<iostream>
#include<string>
#include<cstring>
using namespace std; const int maxn = +;
int M,num;
bool map2[maxn][maxn],mark[maxn];
map<string,int> mp1;
pair<map<string,int>::iterator,bool> iter;
int visit[maxn];
int find(const char *s) {
string s1 = s;
iter = mp1.insert(pair<string,int> (s1,++M));
if(iter.second)
return M;
else {
M--;
return mp1[s1];
}
}
void dfs(int x) {
for(int i = ;i<=M;++i)
if(!mark[i] && map2[x][i]) {
num++;
mark[i] = ;
dfs(i);
}
}
int main() {
int n;
char str1[],str2[];
while(scanf("%d",&n),n) {
M = ;
memset(map2,,sizeof(map2));
memset(visit,,sizeof(visit));
for(int i = ;i<=n;++i) {
scanf("%s%s",str1,str2);
int x = find(str1);
int y = find(str2);
map2[x][y] = ;
visit[y] = ;
}
bool flag = ;
for(int i = ;i<=M;++i)
if(!visit[i]) {
num = ;
memset(mark,,sizeof(mark));
mark[i] = ;
dfs(i);
if(num == M-) {
flag = ;
break;
}
}
printf(flag? "Yes\n":"No\n");
mp1.clear();
}
return ;
}

HDU 2094 产生冠军 dfs加map容器的更多相关文章

  1. [HDU] 2094 产生冠军(拓扑排序+map)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2094 注意每组数据处理前,map要清空. #include<cstdio> #includ ...

  2. HDU 2094 产生冠军(STL map)

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. HDU 2094 产生冠军 (map容器)

    title: 产生冠军 杭电 2094 tags: [acm,stl] 题目链接 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则 ...

  4. hdu 2094 产生冠军

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2094 产生冠军 Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比 ...

  5. HDU 2094 产生冠军(半拓扑排序+map)

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. [HDU] 2094 产生冠军(拓扑排序+map)

    产生冠军 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  7. 题解报告:hdu 2094 产生冠军

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2094 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打 ...

  8. hdu 2094 产生冠军(拓扑排序)

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. hdu 2094 产生冠军(STL,set)

    题目 //把所有的出现的名字开始默认都为冠军(1),然后输了的置为0,表示不为冠军,最后统计不为0的, //当有且只有一个不为0的,这个就为冠军,否则,不能产生冠军. //以上思路来自别人的博客.. ...

随机推荐

  1. Littleproxy的使用

    介绍 LittleProxy是一个用Java编写的高性能HTTP代理,它基于Netty事件的网络库之上.它非常稳定,性能良好,并且易于集成到的项目中. 项目页面:https://github.com/ ...

  2. laravel报404错误与NGINX报404错误区别

      nginx自己配置的404页面 和laravel配置的404页面:如果报了404 :执行laravel的404页面: 那这个404页面对nginx来说意味着什么    laravel 路由和页面找 ...

  3. C语言版kafka消费者代码运行时异常kafka receive failed disconnected

    https://github.com/edenhill/librdkafka/wiki/Broker-version-compatibility如果使用了broker版本是0.8的话, 在运行例程时需 ...

  4. 初识Linq to Entity

    技术介绍: LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.net代码,以与查询数据库相同的方式操作内存数据 ...

  5. NetApp存储方案及巡检命令

    一.MCC概述 Clustered Metro Cluster(简称MCC)是Netapp Data Ontap提供的存储双活解决方案,当初的方案是把1个FAS/ V系列双控在数据中心之间拉远形成异地 ...

  6. 20165218 《网络对抗技术》Exp1 逆向及Bof基础

    Exp1 逆向及Bof基础 基础知识 1. NOP, JNE, JE, JMP, CMP汇编指令的机器码 指令 机器码 NOP NOP指令即"空指令",在x86的CPU中机器码为0 ...

  7. bzoj 3816&&uoj #41. [清华集训2014]矩阵变换

    稳定婚姻问题: 有n个男生,n个女生,所有女生在每个男生眼里有个排名,反之一样. 将男生和女生两两配对,保证不会出现婚姻不稳定的问题. 即A-1,B-2 而A更喜欢2,2更喜欢A. 算法流程: 每次男 ...

  8. bzoj 2809

    2809: [Apio2012]dispatching Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4519  Solved: 2329[Submi ...

  9. linux命令总结sed命令详解

    Sed 简介 sed 是一种新型的,非交互式的编辑器.它能执行与编辑器 vi 和 ex 相同的编辑任务.sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编辑命令.指定文件名,然后在屏幕上查 ...

  10. unity抗锯齿(Antialiasing)

    目前知道的有两种方式,下面依次介绍 一.系统菜单设置法. 这样只能简单去锯齿,要想效果特别明显,看下面的脚本吧. 二.为摄像机挂上一个去锯齿的系统脚本 导入后Assets资源下多了一个包 找到这个脚本 ...