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 ...
随机推荐
- nyoj_2:括号配对问题
模拟栈的操作,很基础的一道题 题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=2 #include<stdio.h> #inc ...
- Java网络连接之HttpURLConnection、HttpsURLConnection
工具类包含两个方法: http请求.https请求 直接看代码: package com.jtools; import java.io.BufferedReader; import java.io.I ...
- jQuery请求后台接口
function test() { console.log("请求准备发送"); $.ajax({ type : "POST", url : "/ap ...
- LeetCode-Interleaving String[dp]
Interleaving String Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Fo ...
- 【css】过度效果
http://kissygalleryteam.github.io/girlLink/doc/demo/index.html
- 关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
优化方案 1.安装Application Initialization 这是在iis8出来后才有的,iis8内置的功能,而对于iis7.5也提供了一个扩展以支持这个功能. Application In ...
- 关于Oracle连接超时的问题
测试环境ORACLE 11.2.0. 如果连接池设置单个连接闲置时间大于数据库连接超时时间,则连接池中的连接发出数据请求时会出现Connect timeout occurred错误, 这是由于连接超时 ...
- java NIO详解
http://zalezone.cn/2014/09/17/NIO%E7%B2%BE%E7%B2%B9/ 1. 前言 我们在写java程序的时候,为了进行优化,把全部的精力用在了处理效率上,但是对IO ...
- python爬取百度搜索结果ur汇总
写了两篇之后,我觉得关于爬虫,重点还是分析过程 分析些什么呢: 1)首先明确自己要爬取的目标 比如这次我们需要爬取的是使用百度搜索之后所有出来的url结果 2)分析手动进行的获取目标的过程,以便以程序 ...
- JDBC连接数据库的基本步骤
第一步:注册驱动==>:Class.forName("数据库驱动的完整名称(mysql的数据库驱动名称:com.mysql.jbdc.Driver)"); 第二步:创建一个数 ...