POJ - 2912 Rochambeau (带权并查集+枚举)
题意:有N个人被分为了三组,其中有一个人是开了挂的。同组的人的关系是‘=’,不同组的人关系是‘<’或'>',但是开了挂的人可以给出自己和他人任意的关系。现在要根据M条关系找出这个开了挂的人。M条关系中可能有多组异常信息。可能会有多个人是外挂,也可能找不出外挂,如果能找到,则要输出其编号X和最早能确定他身份的前Y组条件。
分析:和食物链那题性质很像,但是食物链只需要判断条件对错,而本题是要根据正确性不明的信息找出答案。
还是用模3系的带权并查集解决该问题。枚举每个人i不是外挂的情况,对每一种情况,用不含i的关系去验证,出现矛盾则表示排除了i之外的其他中外挂,记录出现错误的关系编号。
取N-1个人发生验证时发生错误的最大关系编号,就可以推断出谁是外挂了。
如果每个人都不出现错误,则是不可能的情况;如果有多人可以是外挂,则不能找出;否则输出答案。
#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
typedef long long LL;
const int maxn =2e3+;
int fa[maxn],num[maxn];
int pos[maxn]; //错误发生的编号
void init(int N){
for(int i=;i<=N;++i){
fa[i]=i;
num[i]=;
}
}
//模3系
inline int Find(int x){
if(fa[x]==x) return x;
int f = fa[x];
fa[x] = Find(fa[x]);
num[x] = (num[x]+num[f])%;
return fa[x];
}
bool Union(int a,int b,int op)
{
int roota = Find(a),rootb =Find(b);
if(roota==rootb){
if((num[a]+op)%!=num[b]) return false;
else return true;
}
fa[rootb] = roota;
num[rootb] = (-num[b]+num[a]+op+)%;
return true;
}
struct Query{
int a,b,op;
}p[maxn]; int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int N,M,T,Q,u,v,tmp,cas=,a,b;
char op;
while(scanf("%d%d",&N,&M) == ){
memset(pos,-,sizeof(pos));
for(int i=;i<=M;++i){
scanf("%d%c%d",&p[i].a,&op,&p[i].b);
if(op=='=') p[i].op=;
if(op=='<') p[i].op=;
if(op=='>') p[i].op=;
}
for(int i=;i<N;++i){ //尝试枚举每个人不是judge的可能
init(N);
for(int j=;j<=M;++j){
if(i==p[j].a || i==p[j].b) continue; //跳过包含i的条件
if(!Union(p[j].a,p[j].b,p[j].op)) {
pos[i]=j;
break; //找到错误的发生即可推断出judge在i之外的人中
}
}
}
int cnt=,ans1=,ans2=;
for(int i=;i<N;++i){
if(pos[i]==-){ //如果排除这个人不会产生问题,那么他就可以是judge
cnt++;
ans1 = i;
}
ans2 = max(ans2,pos[i]); //推断n-1个人不是judge之后,也就知道了谁是judge
}
if(cnt>) printf("Can not determine\n");
else if(cnt==) printf("Impossible\n");
else printf("Player %d can be determined to be the judge after %d lines\n",ans1,ans2);
}
return ;
}
POJ - 2912 Rochambeau (带权并查集+枚举)的更多相关文章
- POJ 2912 Rochambeau(种类并查集+枚举)
题目链接:http://poj.org/problem?id=2912 题目大意:n个人玩,玩石头剪刀布游戏,其中1人是裁判,剩下的n-1个人分为3组, 他们商量好了,相同组的人每次都出相同的手势,不 ...
- POJ2912:Rochambeau(带权并查集)
Rochambeau Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5208 Accepted: 1778 题目链接:h ...
- K - Find them, Catch them POJ - 1703 (带权并查集)
题目链接: K - Find them, Catch them POJ - 1703 题目大意:警方决定捣毁两大犯罪团伙:龙帮和蛇帮,显然一个帮派至少有一人.该城有N个罪犯,编号从1至N(N<= ...
- A Bug's Life POJ - 2492 (带权并查集)
A Bug's Life POJ - 2492 Background Professor Hopper is researching the sexual behavior of a rare spe ...
- poj 1703(带权并查集)
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31840 Accepted: ...
- POJ 1182 食物链 (带权并查集 && 向量偏移)
题意 : 中文题就不说题意了…… 分析 : 通过普通并查集的整理归类, 能够单纯地知道某些元素是否在同一个集合内.但是题目不仅只有种类之分, 还有种类之间的关系, 即同类以及吃与被吃, 而且重点是题目 ...
- poj 1182 食物链 带权并查集
食物链是并查集的进阶运用的一道非常经典的题目. 题目如下: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A, ...
- poj2912(带权并查集+枚举)
题目链接:http://poj.org/problem?id=2912 题意:给n个人,m组关系,玩石头剪刀布的游戏,n个人中除一个人judge以外,其他人属于3个group(即石头.剪刀.布),他们 ...
- [poj 2912] Rochambeau 解题报告 (带权并查集)
题目链接:http://poj.org/problem?id=2912 题目: 题目大意: n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000) 接下来m行形 ...
随机推荐
- 远程sql 同步程序
exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'Ad Hoc Distributed Queries' ...
- 在使用add()方法添加组件到容器时,必须指定将其放置在哪个区域中
BorderLayout是Window.Frame和Dialog的默认布局管理器,其将容器分成North.South.East.West和Center 5个区域,每个区域只能放置一个组件. 在使用ad ...
- Abstract Window Toolkit(AWT)是一个图形过程库
Abstract Window Toolkit(AWT)是一个图形过程库,使用Java语言通过位图显示来操纵窗口.最后设计者又将AWT扩充为Alternative Window工具箱和Applet W ...
- poj 2503 Babelfish(字典树或着STL)
Babelfish Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 35828 Accepted: 15320 Descr ...
- WPF 开源项目 【watcher】 守望者,一款监控,统计,分析你每天在自己电脑上究竟干了什么的软件
时隔多年(两年),天天沉迷写PHP的我在连续加薪了逐渐发现自己不怎么写代码了. 甚至有一天我发现我连IDE 都没有打开,实在是太堕落了 为了及时悬崖勒马,回头是岸.为了鼓励自己专心写代码,我决定写一款 ...
- 拦截asp.net输出流并进行处理的方法
本文实例主要实现对已经生成了HTML的页面做一些输出到客户端之前的处理. 方法的实现原理是:把Response的输出重定向到自定义的容器内,也就是我们的StringBuilder对象里,在HTML所有 ...
- 把登录和退出功能单独写到一个公共.py脚本,其它用例test1,test2调用公共登录,退出函数
公共登录/退出函数模块(login_exit.py): #coding:utf-8import timedef login(driver, username, password):#此处的driver ...
- 提高SDN控制器拓扑发现性能
原文由我发表在sdnlab.com.原文链接:http://www.sdnlab.com/15425.html SDN网络的一大特点就是资源由控制器集中管理,控制器管理网络,最基本的当然需要知道网络的 ...
- SQL查询和编程基础
本文转自http://www.cnblogs.com/Jolinson/p/3552786.html 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基 ...
- [LintCode] 合并排序数组
A subroutine of merge sort. class Solution { public: /** * @param A and B: sorted integer array A an ...