POJ 2912 Rochambeau
题意:有一些人玩石头剪刀布,其中有一个人(称其为裁判)可以出“石头”,“剪刀”,“布”中的任意一个,其他人永远只能出相同的一个。即有的人只能出剪刀,有的人只能出石头,有的人只能出布。进行了多次对决,每次只告诉你谁赢了(或者平手),不说谁出了什么。问能否判断出谁是裁判,裁判有多少个?若只有一个裁判,问在进行了多少次对决以后就能判断出裁判是谁。
解法:首先,判断出裁判的方法是,若1,2,3号选手的结果出现了矛盾,则1,2,3号中必有一个人是裁判,
(1)这个时候如果3,4号的对决结果出现矛盾,则判定3为裁判,然后还需要验证(即如果3为裁判,其他对决结果是不是不会有矛盾);
(2)这个时候如果4,5号出现矛盾,则说明裁判不止一个人,与题设不符;
(3)如果之后都再也没有出现矛盾,则说明不能判断出裁判是谁。
所以,方法就是,枚举谁是裁判,判断是否所有不涉及到裁判的对决结果之间没有矛盾。如果只有一个裁判,还需要求进行了多少次对决以后就已经能判断出裁判是谁了。由以上结论不难看出,在整个枚举过程中,最大的出现矛盾的对决的编号数即为所求。
tag:并查集,good
/*
* Author: Plumrain
* Created Time: 2013-11-28 19:23
* File Name: DS-POJ-2912.cpp
*/
#include <iostream>
#include <cstdio>
#include <vector> using namespace std; #define PB push_back struct node{
int f, r;
}; int n, m, line;
node p[];
char xn[];
vector<int> ans;
int an[], bn[]; int find (int x)
{
if (x != p[x].f){
int y = p[x].f;
p[x].f = find(y);
p[x].r = (p[x].r + p[y].r) % ;
}
return p[x].f;
} void merge(int a, int b, char xx, int t1, int t2)
{
int x;
if (xx == '=') x = ;
else if (xx == '>') x = ;
else x = ; p[t1].f = t2;
p[t1].r = ( - p[a].r + x + p[b].r) % ;
} bool ok(int a, int b, char xx)
{
int x;
if (xx == '=') x = ;
else if (xx == '>') x = ;
else x = ; return x == ((p[a].r + - p[b].r) % );
} bool gao(int x)
{
for (int i = ; i < n; ++ i){
p[i].f = i;
p[i].r = ;
} for (int i = ; i < m; ++ i){
if (an[i] == x || bn[i] == x) continue; int t1 = find(an[i]), t2 = find(bn[i]);
if (t1 != t2)
merge(an[i], bn[i], xn[i], t1, t2);
if (t1 == t2)
if (!ok(an[i], bn[i], xn[i])){
line = max(line, i + );
return ;
}
}
return ;
} int main()
{
while (scanf ("%d%d", &n, &m) != EOF){
if (!m){
if (n == ) printf ("Player 0 can be determined to be the judge after 0 lines\n");
else printf ("Can not determine\n");
continue;
} for (int i = ; i < m; ++ i)
scanf ("%d%c%d", &an[i], &xn[i], &bn[i]); ans.clear();
line = ;
for (int i = ; i < n; ++ i)
if (gao(i)) ans.PB (i); int sz = ans.size();
if (sz > ) printf ("Can not determine\n");
else if (!sz) printf ("Impossible\n");
else printf ("Player %d can be determined to be the judge after %d lines\n", ans[], line);
}
return ;
}
POJ 2912 Rochambeau的更多相关文章
- POJ 2912 - Rochambeau - [暴力枚举+带权并查集]
题目链接:http://poj.org/problem?id=2912 Time Limit: 5000MS Memory Limit: 65536K Description N children a ...
- POJ 2912 Rochambeau(种类并查集+枚举)
题目链接:http://poj.org/problem?id=2912 题目大意:n个人玩,玩石头剪刀布游戏,其中1人是裁判,剩下的n-1个人分为3组, 他们商量好了,相同组的人每次都出相同的手势,不 ...
- [poj 2912] Rochambeau 解题报告 (带权并查集)
题目链接:http://poj.org/problem?id=2912 题目: 题目大意: n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000) 接下来m行形 ...
- poj 2912 Rochambeau(枚举+带权并查集)
题目链接:http://poj.org/problem?id=2912 题意:多个人玩石头剪刀布分成3组和一个裁判,每一组提前选定了自己出哪个手势,裁判可以随意出什么手势,问是否能够从给出的一系列石头 ...
- POJ 2912 Rochambeau(难,好题,枚举+带权并查集)
下面的是从该网站上copy过来的,稍微改了一点,给出链接:http://hi.baidu.com/nondes/item/26dd0f1a02b1e0ef5f53b1c7 题意:有N个人玩剪刀石头布, ...
- POJ - 2912 Rochambeau 种类并查集
题意:有三组小朋友在玩石头剪刀布,同一组的小朋友出的手势是一样的.这些小朋友中有一个是裁判,他可以随便出手势.现在给定一些小朋友的关系,问能否判断出裁判,如果能最早什么时候能够找到裁判. 思路:枚举每 ...
- POJ 2912 Rochambeau(暴力)+【带权并查集】
<题目链接> 题目大意: n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000),接下来m行形如x, y, ch的输入,ch='='表示x, y平局 ...
- POJ - 2912 Rochambeau (带权并查集+枚举)
题意:有N个人被分为了三组,其中有一个人是开了挂的.同组的人的关系是‘=’,不同组的人关系是‘<’或'>',但是开了挂的人可以给出自己和他人任意的关系.现在要根据M条关系找出这个开了挂的人 ...
- 【35.53%】【POJ 2912】Rochambeau
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2837 Accepted: 1008 Description N childre ...
随机推荐
- WinForm中的事件触发机制学习
在一个Form窗体中拖个按钮,双击后系统自动生成代码: private void button1_Click(object sender, EventArgs e) { } 同时在窗体的Initial ...
- classpath and path.
simply talk about the <path> and the <classpath> in java development. when the <path& ...
- 解决c#处理excel时故障 找不到可安装的 isam
直接拷贝的以前代码,但因软件版本,系统环境的变化,导致提示“找不到可安装的 isam”. 我目前新的软件环境:win8.1+office2010+vs2013 解决办法是修改连接字符串: 处理exce ...
- JAVA JDK 1.6 API中文版.CHM打开chm提示,“ 已取消到该网页的导航”
JAVA JDK 1.6 API中文版.CHM打开chm提示,“ 已取消到该网页的导航” silent fish 装了win7后,打开chm文件,发现很多在xp系统打开正常的chm文件竟然出现问题, ...
- SQL SERVER 存储过程基础
一.注释 -- 单行注释,从这到本行结束为注释,类似C++,c#中// /* … */ 多行注释,类似C++,C#中/* … */ 二.变量 (int, smallint, tinyint, deci ...
- Xcode添加静态库以及编译选项配置常见问题
一,Xcode编译出现Link错误,出现"duplicate symbols for architecture i386 clang"提示.问题:链接时,项目有重名文件.解决:根据 ...
- Vijos1825 NOI2008 志愿者招募 费用流
Orz ByVoid大神的题解:https://www.byvoid.com/blog/noi-2008-employee/ 学习网络流建图的好题,不难想到线性规划的模型,不过利用模型的特殊性,结合网 ...
- ccui.ScrollView 扩展
大多数游戏都有背包这个东西. 道具列表通常用 ScrollView 来实现. 这个ScrollView内部有一个Layout, 滑动都是由移动这个Layout来实现. 道具摆放通常从上往下, 从左到右 ...
- 【HDU2815】【拓展BSGS】Mod Tree
Problem Description The picture indicates a tree, every node has 2 children. The depth of the nod ...
- 单选按钮 点击value值自动把单选按钮选中
HTML 代码 <tr> <td align="right">性别:</td> <td><inputt ...