题意:有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 (带权并查集+枚举)的更多相关文章

  1. POJ 2912 Rochambeau(种类并查集+枚举)

    题目链接:http://poj.org/problem?id=2912 题目大意:n个人玩,玩石头剪刀布游戏,其中1人是裁判,剩下的n-1个人分为3组, 他们商量好了,相同组的人每次都出相同的手势,不 ...

  2. POJ2912:Rochambeau(带权并查集)

    Rochambeau Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5208   Accepted: 1778 题目链接:h ...

  3. K - Find them, Catch them POJ - 1703 (带权并查集)

    题目链接: K - Find them, Catch them POJ - 1703 题目大意:警方决定捣毁两大犯罪团伙:龙帮和蛇帮,显然一个帮派至少有一人.该城有N个罪犯,编号从1至N(N<= ...

  4. A Bug's Life POJ - 2492 (带权并查集)

    A Bug's Life POJ - 2492 Background Professor Hopper is researching the sexual behavior of a rare spe ...

  5. poj 1703(带权并查集)

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 31840   Accepted: ...

  6. POJ 1182 食物链 (带权并查集 && 向量偏移)

    题意 : 中文题就不说题意了…… 分析 : 通过普通并查集的整理归类, 能够单纯地知道某些元素是否在同一个集合内.但是题目不仅只有种类之分, 还有种类之间的关系, 即同类以及吃与被吃, 而且重点是题目 ...

  7. poj 1182 食物链 带权并查集

    食物链是并查集的进阶运用的一道非常经典的题目. 题目如下: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A, ...

  8. poj2912(带权并查集+枚举)

    题目链接:http://poj.org/problem?id=2912 题意:给n个人,m组关系,玩石头剪刀布的游戏,n个人中除一个人judge以外,其他人属于3个group(即石头.剪刀.布),他们 ...

  9. [poj 2912] Rochambeau 解题报告 (带权并查集)

    题目链接:http://poj.org/problem?id=2912 题目: 题目大意: n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000) 接下来m行形 ...

随机推荐

  1. CI 跳转

    redirect('home/play/index');

  2. HBase之HFile解析

    Sumary: Protobuf BinarySearch 本篇主要讲HFileV2的相关内容,包括HFile的构成.解析及怎么样从HFile中快速找到相关的KeyValue.基于Hbase 0.98 ...

  3. jquery mobile demo

    <!DOCTYPE html> <html> <head> <title>jQuery Mobile Demo</title> <me ...

  4. poj 2503 Babelfish(字典树或着STL)

    Babelfish Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 35828   Accepted: 15320 Descr ...

  5. NLM非局部均值算法相关

    NLM原文: 基于图像分割的非局部均值去噪算法 基于图像分割的非局部均值去噪算法_百度文库 https://wenku.baidu.com/view/6a51abdfcd22bcd126fff705c ...

  6. HTTP请求的过程&HTTP/1.0和HTTP/1.1的区别&HTTP怎么处理长连接

    http://www.cnblogs.com/GumpYan/p/5821193.html

  7. nginx搭建文件服务器

    在部署了各种应用后,产生的日志文件,需要在线下载查看,不用每次登陆服务器去拿: 这里,因为服务器部署了很多的应用程序,可以建一个主目录mylog,在主目录里用软连接将需要的各个日志文件夹都建好连接 l ...

  8. mybatis 处理 mysql 表中的 text类型的 字段

    在mysql 中 text类型的字段: service_detail text NULL 服务描述   . 对应java文件中 model 中的 String:  private String ser ...

  9. jQuery的validate验证插件使用方法

    (1)默认校验规则(1)required:true 必输字段(2)remote:"check.php" 使用ajax方法调用check.php验证输入值(3)email:true ...

  10. angualar入门学习-- 自定义指令 指令编译执行过程

    3个阶段: 一.加载阶段 加载angular.js的源码,找到ng-app确定应用边界范围. 二.编译阶段 compile 查找所有指令,保存在一个列表中 对所有指令按优先级(property属性值) ...