题意:有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. SecureCRT超级终端使用说明

    SecureCRT超级终端使用说明 一.连接POS机 1.运行SecureCRT,选择‘文件’菜单,在下拉菜单中选择‘快速连接’菜单: 2.在弹出的对话框中按如下图选择参数: 3.POS端开机,且数据 ...

  2. IntelliJ IDEA怎么安装

    IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构. J2EE支持.各类版本工具 ...

  3. iOS 横向菜单

    MKHorizMenu 源码地址 现在想要实现以下效果,其中“选时间”这部分是一个NavigationBar,“日期”是横向的菜单,“电影时段”是TableView. 比较难实现的是横向菜单,因为没有 ...

  4. 下载Ubuntu镜像

    Ubuntu最新桌面版:http://www.ubuntu.org.cn/download/desktop Ubuntu历史版本下载,只需要更改链接后面的版本号:http://releases.ubu ...

  5. 到底什么是hash

    1.什么是hash算法 Hash(散列.杂凑)算法,是把任意长度的输入通过特定的算法变换成固定长度的输出,输出的值就是hash值.这个特定的算法就叫hash算法,hash算法并不是一个固定不变的算法. ...

  6. 如何使用C#操作WinAPI

    Windows API是对Windows操作系统的API函数,在C#中调用Windows API的实质是托管代码对非托管代码的调用. 主要使用的格式就是: using System.Runtime.I ...

  7. 定制iOS 7中的导航栏和状态栏

    本文转载至 http://www.cocoachina.com/industry/20131104/7287.html 跟大多数开发者一样,我也正忙于对程序进行升级以适配iOS 7.最新的iOS 7外 ...

  8. html ; css ; javascript ; json ;

    [说明]今天因为看到了前端的js页面和html页面,觉得有必要熟悉一下他们的基本语法,所以花了一天的时间去复习巩固了一下(之前学习过),包括html语法,css语法,javascript语法,对象.B ...

  9. python中的str()与eval函数

    author:headsen chen   date:2018-04-09   10:48:22 eval函数是把str转化成list.dict.tuple str函数把list,dict,tuple ...

  10. 创建TPL自定义模板

    文件布局 <!--1d7c7a527b6335cc7a623305ca940e1findex.tpl.html--> <!DOCTYPE html PUBLIC "-//W ...