poj2912 Rochambeau
Description
N children are playing Rochambeau (scissors-rock-cloth) game with you. One of them is the judge. The rest children are divided into three groups (it is possible that some group is empty). You don’t know who is the judge, or how the children are grouped. Then the children start playing Rochambeau game for M rounds. Each round two children are arbitrarily selected to play Rochambeau for one once, and you will be told the outcome while not knowing which gesture the children presented. It is known that the children in the same group would present the same gesture (hence, two children in the same group always get draw when playing) and different groups for different gestures. The judge would present gesture randomly each time, hence no one knows what gesture the judge would present. Can you guess who is the judge after after the game ends? If you can, after how many rounds can you find out the judge at the earliest?
Input
Input contains multiple test cases. Each test case starts with two integers N and M (1 ≤ N ≤ 500, 0 ≤ M ≤ 2,000) in one line, which are the number of children and the number of rounds. Following are M lines, each line contains two integers in [0, N) separated by one symbol. The two integers are the IDs of the two children selected to play Rochambeau for this round. The symbol may be “=”, “>” or “<”, referring to a draw, that first child wins and that second child wins respectively.
Output
There is only one line for each test case. If the judge can be found, print the ID of the judge, and the least number of rounds after which the judge can be uniquely determined. If the judge can not be found, or the outcomes of the M rounds of game are inconsistent, print the corresponding message.
Sample Input
3 3
0<1
1<2
2<0
3 5
0<1
0>1
1<2
1>2
0<2
4 4
0<1
0>1
2<3
2>3
1 0
Sample Output
Can not determine
Player 1 can be determined to be the judge after 4 lines
Impossible
Player 0 can be determined to be the judge after 0 lines 题目大意:小朋友们玩石头剪刀布,决定了出什么之后就会一直出什么。除了裁判,裁判每次出的招式可能不一样。给出几组比试结果,求出谁是裁判。如果能求出则写出最少在几组比试结果之后就能得出结果。如果求不出,则给出不可能求得出或者是结果可能性太多无法判定。
思路:并查集食物链的加强版。在求出父亲的同时,还增加了一个关系说明。a[x]表示x与其父亲fx的关系。1:fx<x。2:fx>x。3:fx=x。
每次求出父亲的时候还要计算他们之间的关系。
求裁判时,枚举谁是裁判。然后将裁判的出拳结果出数据中去掉,接下来开始求小朋友间的胜负关系是否矛盾。如果出了去除裁判k之外,去除其他都会得出矛盾,则裁判是k。如果去除多个数都没有矛盾,裁判无法判断。如果去除谁有矛盾,则不可能求出结果。
/*
* Author: Joshua
* Created Time: 2014年07月12日 星期六 10时47分42秒
* File Name: poj2912.cpp
*/
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 505
#define maxm 2005 using namespace std;
typedef long long LL;
int n,m;
int a[maxn],f[maxn]; int gf(int x)
{
if (f[x]!=x)
{
int fx=f[x];
f[x]=gf(f[x]);
a[x]=(a[x]+a[fx])%;
}
return f[x];
} void solve()
{
int x[maxm],y[maxm],p[maxm];
int ans,err,step=,gfx,gfy,type,xx,yy,cnt=;
char c;
for (int i=;i<=m;++i)
{
scanf("%d%c%d",&x[i],&c,&y[i]);
if (c=='<') p[i]=;
if (c=='>') p[i]=;
if (c=='=') p[i]=;
}
for (int i=;i<n;++i)
{
for (int j=;j<n;++j)
{
a[j]=;
f[j]=j;
}
err=;
for (int j=;j<=m && !err;++j)
{
xx=x[j];
yy=y[j];
if (xx==i || yy==i) continue;
gfx=gf(xx);
gfy=gf(yy);
type=(a[xx]-a[yy]+p[j]+)%;
if (gfy!=gfx)
{
f[gfy]=gfx;
a[gfy]=type;
}
else if ((a[xx]+p[j])%!=a[yy])
err=j;
}
if (err)
{
cnt++;
step=max(step,err);
}
else
ans=i;
}
if (cnt==n) printf("Impossible\n");
else if (cnt<n-) printf("Can not determine\n");
else printf("Player %d can be determined to be the judge after %d lines\n",ans,step);
}
int main()
{
while (scanf("%d%d",&n,&m)==)
{
solve();
}
return ;
}
poj2912 Rochambeau的更多相关文章
- POJ2912 Rochambeau [扩展域并查集]
题目传送门 Rochambeau Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4463 Accepted: 1545 ...
- POJ2912:Rochambeau(带权并查集)
Rochambeau Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5208 Accepted: 1778 题目链接:h ...
- POJ2912 Rochambeau —— 种类并查集 + 枚举
题目链接:http://poj.org/problem?id=2912 Rochambeau Time Limit: 5000MS Memory Limit: 65536K Total Submi ...
- [POJ2912]Rochambeau(并查集)
传送门 题意: n个人分成三组,玩石头剪子布游戏,同一组的人只能出同样固定的的手势,其中有一个是裁判不属于任何组,可以出任意手势,给出m个信息x op y 表示x,y是从三个组里面随机抽取的或者是裁判 ...
- 【转】并查集&MST题集
转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- hdu图论题目分类
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDU图论题单
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- 【POJ2912】【并查集】Rochambeau
Description N children are playing Rochambeau (scissors-rock-cloth) game with you. One of them is th ...
随机推荐
- mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'
在使用mybaitis传参数的时候,如果仅传入一个类型为String的参数,那么在 xml文件中应该使用_parameter来代替参数名. 比如mapper中如下方法,只有一个String值 publ ...
- Hibernate 实体映射类的状态值自动转换
经常会遇到有些字段在数据库只是一个 byte 值,但是取出数据后需要转换为真实的状态名称. 举个栗子:一个图书管理系统,书籍有一个属性 stat(借出状态),在库中只需要保存一个 0/1/2/3/4 ...
- HTML5的应用缓存
HTML5:提供一种应用缓存机制,使得基于web的应用程序可以离线运行.开发者可以使用 Application Cache (AppCache) 接口设定浏览器缓存的数据并使得数据离线有效. 在处 ...
- LuaFramework热更新过程(及可更新的loading界面实现)
1.名词解释: 资源包:点击 LuaFramework | Build XXX(平台名) Resource,框架会自动将自定义指定的资源打包到StreamingAssets文件夹,这个 ...
- (转)Centos7 Nginx安装
场景:工作中使用的suse,因为系统可可查资料太少,且系统中一些功能的确实,导致很多集群中功能无法顺利测试通过,在Centos上面进行测试,能够更快的熟悉项目的架构过程! 1 安装准备 首先由于ngi ...
- (转)Linux修改SSH登录欢迎语
场景:感觉这样做挺个性的,做个记录! 1 Linux修改SSH的欢迎语 众所周知,Linux系统并没有像Windows一样自带远程桌面连接,虽然可以通过后期安装VNC之类的软件来弥补这个缺点,但用了L ...
- bootstrap-table 怎么自定义搜索按钮实现点击按钮进行查询
bootstrap-table自带搜索框感觉有点丑,我们可以把搜索功能单独拉出来放到页面的某一个位置. 首先我们看一下官方演示: 如果你感觉集成的检索框不太好看,而且我们也不想让搜索框和列表放到一块去 ...
- 【CSS】整屏大背景
1. 利用div的层次,设置底层div充满屏幕,并给div设置背景图 <div id="Layer1" style="position:absolute;top:0 ...
- Java生成MD5加密字符串代码实例
这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ...
- readelf相关命令
-a --all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I. -h --file-header 显示elf文件开始的文件头信息. -l --program-heade ...