poj2912 带权并查集
题意:多个人玩石头剪刀布,每个人提前选定了自己出哪个手势,而其中有一种特殊的人他可以随意出什么手势,问是否能够从给出的一系列石头剪刀布游戏中判断出哪个是特殊的,可以从第几局游戏中判断出来。
首先按照食物链那题的做法,定 0,1,2 做为三种手势就可以了,不过由于判断是哪个人比较麻烦,不知道哪个人的选择是无效的,就不知道那几次游戏是不正确不能加入并查集的,因此就直接暴力枚举每个人是否为特殊的人,对于涉及这个人的所有游戏都不进行并查集操作,看剩下的游戏中是否会有矛盾,如果有就说明这个人不是特殊的人,否则他就可能是。最后如果只有一个人可能是,就可以判读出来,而判断出来的局数,就是枚举其他所有人出现矛盾的游戏场次的最大值,因为只有否定完其他所有人才能确定这个人是特殊的。
#include<stdio.h>
#include<string.h>
const int maxm=; int fa[maxm],num[maxm],wa[maxm];
struct ques{
int a,b,c;
}q[]; void init(int n){
for(int i=;i<=n;++i){
fa[i]=i;
num[i]=;
}
} int find(int x){
int r=x,t1,t2,c=;
while(r!=fa[r]){
c+=num[r];
r=fa[r];
}
while(x!=r){
t1=fa[x];
t2=c-num[x];
num[x]=c%;
fa[x]=r;
c=t2;
x=t1;
}
return r;
} int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=;i<=m;++i){
char c;
scanf("%d",&q[i].a);
c=getchar();
while(c!='='&&c!='<'&&c!='>')c=getchar();
if(c=='=')q[i].c=;
else if(c=='<')q[i].c=;
else if(c=='>')q[i].c=;
scanf("%d",&q[i].b);
}
memset(wa,-,sizeof(wa));
for(int i=;i<n;++i){
init(n);
for(int j=;j<=m;++j){
if(q[j].a==i||q[j].b==i)continue;
int x=find(q[j].a),y=find(q[j].b);
if(x!=y){
fa[x]=y;
num[x]=((num[q[j].b]+q[j].c-num[q[j].a])%+)%;
}
else{
if((num[q[j].b]+q[j].c)%!=num[q[j].a]){wa[i]=j;break;}
}
}
}
int cnt=,ans1,ans2=;
for(int i=;i<n;++i){
if(wa[i]==-){
cnt++;
ans1=i;
}
if(wa[i]>ans2)ans2=wa[i];
}
if(!cnt)printf("Impossible\n");
else if(cnt>)printf("Can not determine\n");
else printf("Player %d can be determined to be the judge after %d lines\n",ans1,ans2);
}
return ;
}
poj2912 带权并查集的更多相关文章
- POJ2912:Rochambeau(带权并查集)
Rochambeau Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5208 Accepted: 1778 题目链接:h ...
- POJ 1703 Find them, Catch them(带权并查集)
传送门 Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42463 Accep ...
- [NOIP摸你赛]Hzwer的陨石(带权并查集)
题目描述: 经过不懈的努力,Hzwer召唤了很多陨石.已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域.有电力喷射背包的ndsf很自豪,他认为搬陨石很容易,所以他将一些区域 ...
- poj1417 带权并查集 + 背包 + 记录路径
True Liars Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2713 Accepted: 868 Descrip ...
- poj1984 带权并查集(向量处理)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5939 Accepted: 2 ...
- 【BZOJ-4690】Never Wait For Weights 带权并查集
4690: Never Wait for Weights Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 88 Solved: 41[Submit][ ...
- hdu3038(带权并查集)
题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 题意: n表示有一个长度为n的数组, 接下来有m行形如x, y, d的输入, 表示 ...
- 洛谷OJ P1196 银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
- poj1984 带权并查集
题意:有多个点,在平面上位于坐标点上,给出一些关系,表示某个点在某个点的正东/西/南/北方向多少距离,然后给出一系列询问,表示在第几个关系给出后询问某两点的曼哈顿距离,或者未知则输出-1. 只要在元素 ...
随机推荐
- 经典线程同步 互斥量Mutex
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...
- VS2013项目配置directx11
假定你已经安装好了direct11 SDK(官方下的既是最新版本)和VS2013,并在VS2013中建立了一个新工程. 用VS2013打开工程后,点击右键属性,选择VC++目录: 其中在包含目录中添加 ...
- 【kate总结】matlab调用opencv总结
正常情况下,编写好matlab调用opencv的代码. 1.输入 MEX XX.CPP(所有的mex都要编译) 2.将生成的.mexw64 放到要调用的文件夹下即可 出错总结: 本人写的matla ...
- 提示错误#165 too few argument in function call
调用函数时,参数个数少于函数定义.检查一下函数定义和参数调用,两个要一致.
- hadoop常见错误集锦
1 Hadoop namenode -format后Incompatible namespaceIDS 错误解决办法 重新格式话namenode后,会重新分配一个namespaceId, 这个nam ...
- Python入门(四,高级)
一,面向对象 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的. ...
- PHP中的正则表达式的使用
PHP中的正则表达式基础知识1.正则表达式就是描述字符串排列模式的一种自定义语法规则2.如果可以使用字符串处理函数完成的任务,就不使用正则表达式3.有一些复杂的操作,只能使用正则表达式完成4.正则表达 ...
- C# Rhino Mocks
Mock和Stub的区别: 1,Stub是一个在你的测试代码中需要用到的object,你可以为它设置expectations,然后它就会按其运行,但是这些expectations不会被核对. 2,Mo ...
- Python 练习册--生成唯一激活码(邀请码)
题目是这样子的: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 分析 其实要生成 ...
- ERP反馈信息管理(十九)
前台显示的界面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Custo ...