POJ - 2912 Rochambeau 种类并查集
题意:有三组小朋友在玩石头剪刀布,同一组的小朋友出的手势是一样的。这些小朋友中有一个是裁判,他可以随便出手势。现在给定一些小朋友的关系,问能否判断出裁判,如果能最早什么时候能够找到裁判。
思路:枚举每个小朋友,删除与这个小朋友有关的边,利用并查集判断是否有冲突,如果有冲突说明这个小朋友不能成为裁判,因为不可能有两个裁判。记录可能的裁判的数量,以及对应每个小朋友最早冲突的时间。
如果裁判的数量为1,很明显这个小朋友就是裁判,那么如何求得最早判定的时间?利用排除法,如果能够尽快的排除其他n-1个小朋友成为裁判的机会,那么答案就是max(err[i]),err[i]就是每个小朋友冲突的最早时间。
AC代码
#include <cstdio>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 500 + 5;
struct node{
int par;
int real;
}a[maxn];
struct Edge{
int u, v, k;
}b[maxn<<2];
void init(int n) {
for(int i = 0; i < n; ++i) {
a[i].par = i;
a[i].real = 0;
}
}
int find(int x) {
if(a[x].par == x) return x;
int par = find(a[x].par);
a[x].real = (a[x].real + a[a[x].par].real) % 3;
return a[x].par = par;
}
bool unionset(int x, int y, int r) {
int rx = find(x), ry = find(y);
if(rx == ry) {
int rr = (3 - a[y].real + a[x].real) % 3;
if(rr != r) return false;
}
else { //合并
a[rx].par = y;
a[rx].real = (3 - a[x].real + r) % 3;
}
return true;
}
int main() {
int n, m;
while(scanf("%d%d", &n, &m) == 2) {
getchar();
char ch;
for(int i = 0; i < m; ++i) {
scanf("%d", &b[i].u);
while(ch = getchar()) {
if(ch == '=' || ch == '>' || ch == '<') {
if(ch == '=') b[i].k = 0;
else if(ch == '>') b[i].k = 1;
else b[i].k = 2;
break;
}
}
scanf("%d", &b[i].v);
//printf("%d %d %d\n", b[i].u, b[i].k, b[i].v);
}
int err = 0, flag, cnt = 0, judge;
for(int i = 0; i < n; ++i) { //枚举裁判
init(n);
int flag = 1;
for(int j = 0; j < m; ++j) {
int u = b[j].u, v = b[j].v;
if(u == i || v == i) continue;
if(!unionset(u, v, b[j].k)) {
err = max(err, j+1);
flag = 0;
break;
}
}
if(flag) {
++cnt;
judge = i;
}
}
if(cnt == 0) printf("Impossible\n");
else if(cnt >= 2) printf("Can not determine\n");
else printf("Player %d can be determined to be the judge after %d lines\n", judge, err);
}
return 0;
}
如有不当之处欢迎指出!
POJ - 2912 Rochambeau 种类并查集的更多相关文章
- POJ2912 Rochambeau —— 种类并查集 + 枚举
题目链接:http://poj.org/problem?id=2912 Rochambeau Time Limit: 5000MS Memory Limit: 65536K Total Submi ...
- POJ 1182 食物链(种类并查集)
记得第一次做这道题的时候,推关系感觉有点复杂,而且写完代码后一直WA,始终找不出错误. 在A了十几道并查集后,再做这道题,发现太小儿科了.发现原来之所以WA,就在于查找根节点时,没有同步更新子节点相对 ...
- A Bug’s Life POJ - 2492(种类并查集)
题目链接 每次给出两个昆虫的关系(异性关系),然后发现这些条件中是否有悖论 就比如说第一组数据 1 2 2 3 1 3 1和2是异性,2和3是异性,然后说1和3是异性就显然不对了. 我们同样可以思考一 ...
- 食物链 POJ 1182(种类并查集)
Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...
- poj 1182:食物链(种类并查集,食物链问题)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44168 Accepted: 12878 Description ...
- POJ 1733 Parity game(种类并查集)
http://poj.org/problem?id=1733 题意: 给出一个01串,有多次询问,每次回答[l,r]这个区间内1的个数的奇偶性,但是其中有一些回答是错误的,问到第几个回答时与前面的回答 ...
- Poj(1182),种类并查集
题目链接:http://poj.org/problem?id=1182 再次熟练种类并查集,又积累点经验,和技巧,rank 0 2 1 先计算father[x] ,再更新rank[x]; #inclu ...
- Poj(1703),种类并查集
题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...
- 种类并查集,Poj(1703)
题目链接:http://poj.org/problem?id=1703 第一次做种类并查集,有的地方还不是很清楚,想了一上午,有点明白了,这里记录一下. 这里我参考的红黑联盟的题解. 关键:种类并查集 ...
随机推荐
- Django_中国化
需求: 要求Django显示中文,并使用北京时间 问题原因: Django具有相当的国际化,已经内置了多种语言,汉语当然也不落下,Django默认的时间是utc时间,也就是说相隔八个时区的中国,显示北 ...
- servlet 监听器分类
http://blog.csdn.net/cxg200888/article/details/77894842
- 优秀的基于VUE移动端UI框架合集
1. vonic 一个基于 vue.js 和 ionic 样式的 UI 框架,用于快速构建移动端单页应用,很简约,是我喜欢的风格 star 2.3k 中文文档 在线预览 2.vux 基于WeUI和Vu ...
- js调用系统虚拟键盘
<input type="text" id="tt" /> <script language="javascript" t ...
- Core Animation 文档翻译 (第四篇)
Core Animation 文档翻译(第四篇) 让Layer的content动画起来 核心动画的基础接口以及为拥有Layer的View做的动画扩展接口,使得为Layer制作复杂动画变得简单化.例如改 ...
- Hadoop-2.6.5安装
简介 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现了一个分布式文 ...
- Python笔记001-----简介及常用的库
1.Python是一种解释性语言,大部分代码要比编译型语言(如C++,java等)运行要慢点多.2.对于高并发,多线程的应用程序而言,Python并不是理想语言,python有全局解释器锁(Globa ...
- python之作业--------购物车优化
Read Me:继上次简单购物车的实现,有再一次的升级优化了下,现实现以下几个功能: 1.有客户操作和商家操作,实现,客户可以买东西,当金额不足提醒,最后按q退出,打印购物车列表 2.商家可以添加操作 ...
- 百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)和WGS-84坐标互转
// 坐标转换 var coordTransform = (function () { // 一些常量 var PI = 3.1415926535897932384626; var X_PI = 3. ...
- Hive on ES
ES对于类似数据库的SQL查询很无力,可以使用Hive on ES来实现SQL的查询.2个百万级的索引做关联时,需要大概1分多钟,基于es2.1版本. 1.将elasticsearch-hadoop- ...