【35.53%】【POJ 2912】Rochambeau
Time Limit: 5000MS Memory Limit: 65536K
Total Submissions: 2837 Accepted: 1008
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
Source
Baidu Star 2006 Preliminary
Chen, Shixi (xreborner) living in http://fairyair.yeah.net/
【题解】
做法:
带权并查集
枚举某个人是裁判。如果它是裁判仍会发生冲突。那么就记录最先发生冲突的点在哪里;
(遇到和裁判有关的信息就直接跳过。因为裁判可以什么都出,所以它的信息没有意义。);
记录有多少个人满足:如果裁判是这个人整段信息不会发生冲突;
设为cnt;
如果cnt为0则说明不管谁是裁判都会发生冲突。则所给的信息是impossible的;
如果cnt为1则说明恰好有一个人满足裁判的要求。那么裁判就是他了。至于最早判断的地方就是其他n-1个不满足要求的裁判最早发生冲突的点的最大值。只有在那个信息结束后才能判断其他人不是裁判。
如果cnt大于1,则有多个人满足要求。那么就不能确定。
带权并查集的状态转移和食物链那题类似,我发下链接:
http://blog.csdn.net/harlow_cheng/article/details/52736452
#include <cstdio>
#include <algorithm>
const int MAXN = 600;
const int MAXM = 2999;
struct rec
{
int x, y, z;
};
int n, m;
int f[MAXN], re[MAXN],fe[MAXN];
rec a[MAXM];
//0 same
//1 shu
//2 ying
int ff(int x)
{
if (f[x] == x)
return x;
int olfa = f[x];
f[x] = ff(f[x]);
re[x] = (re[x] + re[olfa]) % 3;
return f[x];
}
int main()
{
//freopen("F:\\rush.txt", "r", stdin);
while (~scanf("%d%d", &n, &m))
{
for (int i = 1; i <= m; i++)
{
char t;
scanf("%d", &a[i].x);
t = getchar();
while (t == ' ') t = getchar();
scanf("%d", &a[i].y);
if (t == '<')
a[i].z = 1;
else
if (t == '>')
a[i].z = 2;
else
a[i].z = 0;
}
for (int i = 0; i <= n - 1; i++)
fe[i] = -1;
for (int ju = 0; ju <= n - 1; ju++)
{
for (int i = 0; i <= n - 1; i++)
f[i] = i, re[i] = 0;
for (int i = 1; i <= m; i++)
{
if (a[i].x == ju || a[i].y == ju)
continue;
int l = ff(a[i].x), r = ff(a[i].y);
if (l == r)
{
int temp = (re[a[i].x] - re[a[i].y] + 3) % 3;
if (temp != a[i].z)
{
fe[ju] = i;
break;
}
}
else
{
f[l] = r;
re[l] = (a[i].z + re[a[i].y] - re[a[i].x] + 3) % 3;
}
}
}
int cnt = 0,judge,ma = 0;
for (int i = 0; i <= n - 1; i++)
{
if (fe[i] == -1)
{
cnt++;
judge = i;
}
ma = std::max(ma, fe[i]);
}
if (cnt == 0)
puts("Impossible");
else
if (cnt == 1)
printf("Player %d can be determined to be the judge after %d lines\n", judge, ma);
else
printf("Can not determine\n");
}
return 0;
}
【35.53%】【POJ 2912】Rochambeau的更多相关文章
- 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)
题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离.问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则 ...
- 【BZOJ 2288】 2288: 【POJ Challenge】生日礼物 (贪心+优先队列+双向链表)
2288: [POJ Challenge]生日礼物 Description ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, ..., AN. 她被允许选择不超 ...
- 【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)
题意:问从(0,0)到(x,y)(0≤x, y≤N)的线段没有与其他整数点相交的点数. 解法:只有 gcd(x,y)=1 时才满足条件,问 N 以前所有的合法点的和,就发现和上一题-- [poj 24 ...
- 【poj 1988】Cube Stacking(图论--带权并查集)
题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...
- bzoj 2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...
- 【POJ】【2348】Euclid‘s Game
博弈论 题解:http://blog.sina.com.cn/s/blog_7cb4384d0100qs7f.html 感觉本题关键是要想到[当a-b>b时先手必胜],后面的就只跟奇偶性有关了 ...
- 【链表】BZOJ 2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 382 Solved: 111[Submit][S ...
- BZOJ2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 284 Solved: 82[Submit][St ...
- BZOJ2293: 【POJ Challenge】吉他英雄
2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 80 Solved: 59[Submit][Stat ...
随机推荐
- PHP:测试SQL注入以及防止SQL注入
在写登录注册的时候发现了SQL和JS注入这个危害网站的用户举动: 测试方法: SQL注入: 先来做一个测试: 用户名:’ or 1 # 密码:随便写8位以上 验证码:写正确 好吧,就那么简单就进去了: ...
- 介绍配置管理工具SVN的使用
配置管理CM(Configuration Mangerment) 一.配置管理工具SVN的介绍 ---Subversion ---是一个开放源代码的版本控制系统 ---时下流行的SVN和GIT 每天开 ...
- Python操作pymysql写入数据库时的错误
错误一 InternalError: (pymysql.err.InternalError) (1366, "Incorrect string value: '\\xE6\\xAD\\xA3 ...
- genymotion 和genymotion eclipse 插件安装 !
昨天天有好心网友在群里共享了一个好用的 android 模拟器 genymotion 昨天就试用了下 真心流畅 各位不妨一试 http://www.genymotion.com/ doc https: ...
- git错误——Eclipse git commit错误;Committing changes has encountered a problem An Internal error occured
背景 在使用eclipse时,使用git commit 提交代码时,出项如下错误 解决方法 在工程目录下找到 .git 文件夹 ,找到里面的 index.lock 文件,然后删掉这个文件就可以了,如下 ...
- Linxu 用户和用户组管理1
Linux 系统是一个多用户任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后 以这个账号的身份进入系统. 用户的账号一方面可以帮助系统管理员对使用系统的用户进 ...
- Logtail提升采集性能
默认性能限制 为防止滥用消耗过多机器资源,我们对默认安装的Logtail进行了一系列的资源限制.默认安装的Logtail最多日志采集速度为20M/s,20个并发发送. 其他资源限制请参考:启动参数 h ...
- EC Round 33 F. Subtree Minimum Query 主席树/线段树合并
这题非常好!!! 主席树版本 很简单的题目,给一个按照指定节点的树,树上有点权,你需要回答给定节点的子树中,和其距离不超过k的节点中,权值最小的. 肯定首先一想,按照dfs序列建树,然后按照深度为下标 ...
- Oracle数据字典全解
一.概念: 1.数据字典(data dictionary)是 Oracle 数据库的一个重要组成部分,这是一组用于记录数据库信息的只读(read-only)表. 数据字典里存有用户信息.用户的权限信息 ...
- Open Source Projects Released By Google
Open Source Projects Released By Google Google has released over 20 million lines of code and over 9 ...