【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 ...
随机推荐
- day40-Spring 01-上次课内容回顾
- 洛谷 P3958 奶酪 并查集
目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪 ...
- JavaScript--淘宝图片切换
css样式有点问题,但是主要是js逻辑: <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu ...
- 写一个nginx监控日志
下面的代码是实现一个nginx监控日志功能,是不是很好玩呢.
- Python学习之路11☞异常处理
一 错误和异常 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 de ...
- 远程控制工具&&驱动安装仍然没有声音
1. 2.下面是一个远程控制工具 TeamViewer
- [BZOJ3064][Tyvj1518] CPU监控
题目:[BZOJ3064][Tyvj1518] CPU监控 思路: 线段树专题讲的.以下为讲课时的课件: 给出序列,要求查询一些区间的最大值.历史最大值,支持区间加.区间修改.序列长度和操作数< ...
- oracle函数 BFILENAME(dir,file)
[功能]函数返回一个空的BFILE位置值指示符,函数用于初始化BFILE变量或者是BFILE列. [参数]dir是一个directory类型的对象,file为一文件名. insert into lob ...
- oracle函数 SUBSTRB(c1,n1[,n2])
[功能]取子字符串 [说明]多字节符(汉字.全角符等),按2个字符计算 [参数]在字符表达式c1里,从n1开始取n2个字符;若不指定n2,则从第y个字符直到结束的字串. [返回]字符型,如果从多字符右 ...
- @bzoj - 3749@ [POI2015] Łasuchy
目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...