poj 2912 Rochambeau(枚举+带权并查集)
题目链接:http://poj.org/problem?id=2912
题意:多个人玩石头剪刀布分成3组和一个裁判,每一组提前选定了自己出哪个手势,裁判可以随意出什么手势,问是否能够从给出的一系列石头剪刀布游戏中判断出哪个是裁判的,可以从第几局游戏中判断出来。
由于这题的数据量比较小可以枚举一下,枚举一下每一个人假设他们是裁判然后一系列并查集下来看
有没有出现矛盾如果没有那么这个人可能是裁判候补,如果有矛盾那么这个人肯定不是记录一下出现
问题的位置然后继续枚举。位置要去最远的,因为都要判完才知道。如果最后没有矛盾的数目大于2
说明不能确定裁判是谁,如果为0就不可能,其他则是
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n , m , f[510] , root[510];
struct TnT {
int x , y;
char cp;
}node[2010];
void init() {
for(int i = 0 ; i < n ; i++) {
f[i] = i , root[i] = 0;
}
}
int find(int x) {
if(x == f[x])
return x;
int tmp = find(f[x]);
root[x] = (root[x] + root[f[x]] + 3) % 3;
return f[x] = tmp;
}
int main() {
int x , y;
char s[20] , cp;
while(scanf("%d%d" , &n , &m) != EOF) {
for(int j = 1 ; j <= m ; j++) {
scanf("%s" , s);
int len = strlen(s) , temp = 0;
x = 0 , y = 0;
for(int i = 0 ; i < len ; i++) {
if(s[i] == '=' || s[i] == '<' || s[i] == '>') {
temp = i;
cp = s[i];
break;
}
}
for(int i = 0 ; i < temp ; i++) {
x *= 10;
x += s[i] - '0';
}
for(int i = temp + 1 ; i < len ; i++) {
y *= 10;
y += s[i] - '0';
}
node[j].x = x , node[j].y = y , node[j].cp = cp;
}
int count = 0 , pos = 0 , flag = -1 , num = 0;
for(int i = 0 ; i < n ; i++) {
flag = -1;
init();
for(int j = 1 ; j <= m ; j++) {
if(node[j].x == i || node[j].y == i)
continue;
x = node[j].x , y = node[j].y , cp = node[j].cp;
int a = find(x) , b = find(y);
if(a == b) {
if(cp == '=') {
if(root[x] != root[y]) {
flag = j;
break;
}
}
if(cp == '>') {
if(root[x] != (root[y] + 2) % 3) {
flag = j;
break;
}
}
if(cp == '<') {
if(root[x] != (root[y] + 1) % 3) {
flag = j;
break;
}
}
}
else {
f[a] = b;
if(cp == '=') {
root[a] = root[y] - root[x];
root[a] = (root[a] + 3) % 3;
}
if(cp == '>') {
root[a] = root[y] - root[x] + 2;
root[a] = (root[a] + 3) % 3;
}
if(cp == '<') {
root[a] = root[y] - root[x] + 1;
root[a] = (root[a] + 3) % 3;
}
}
}
if(flag == -1) {
num = i;
count++;
}
else
pos = max(pos , flag);
}
if(count == 0) printf("Impossible\n");
else if(count >= 2) printf("Can not determine\n");
else
printf("Player %d can be determined to be the judge after %d lines\n" , num , pos);
}
return 0; }
poj 2912 Rochambeau(枚举+带权并查集)的更多相关文章
- POJ 2912 Rochambeau(难,好题,枚举+带权并查集)
下面的是从该网站上copy过来的,稍微改了一点,给出链接:http://hi.baidu.com/nondes/item/26dd0f1a02b1e0ef5f53b1c7 题意:有N个人玩剪刀石头布, ...
- POJ 1773 Parity game 带权并查集
分析:带权并查集,就是维护一堆关系 然后就是带权并查集的三步 1:首先确定权值数组,sum[i]代表父节点到子节点之间的1的个数(当然路径压缩后代表到根节点的个数) 1代表是奇数个,0代表偶数个 2: ...
- POJ 1182 食物链 【带权并查集】
<题目链接> 题目大意: 动物王国中有三类动物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: 78551 Accepted: 23406 Description ...
- POJ 1182 食物链 【带权并查集/补集法】
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...
- POJ 1733 Parity game (带权并查集)
题意:有序列A[1..N],其元素值为0或1.有M条信息,每条信息表示区间[L,R]中1的个数为偶数或奇数个,但是可能有错误的信息.求最多满足前多少条信息. 分析:区间统计的带权并查集,只是本题中路径 ...
- poj 1182 食物链【带权并查集】
设相等的边权为0,吃的边权为,被吃的边权为2,然后用带权并查集在%3的意义下做加法即可 关系为简单环的基本都可以用模环长的方式是用带权并查集 #include<iostream> #inc ...
- A Bug's Life POJ - 2492 (种类或带权并查集)
这个题目的写法有很多,用二分图染色也可以写,思路很好想,这里我们用关于并查集的两种写法来做. 题目大意:输入x,y表示x和y交配,然后判断是否有同性恋. 1 带权并查集: 我们可以用边的权值来表示一种 ...
- POJ 2912 - Rochambeau - [暴力枚举+带权并查集]
题目链接:http://poj.org/problem?id=2912 Time Limit: 5000MS Memory Limit: 65536K Description N children a ...
随机推荐
- Zabbix在 windows下监控网卡
1.zabbix自定义监控Windows服务器的原理 Zabbix为Windows服务器的监控提供了PerfCounter(性能计数器)这个功能.Zabbix客户端通过PerfCounter获取Win ...
- 49.Qt-网络编程之QTCPSocket和QTCPServer(实现简易网络调试助手)
在上章 48.QT-网络通信讲解1,我们学习了网络通信基础后,本章便来实战一篇.源码正在上传中,等下贴地址. PS:支持客户端和服务器,提供源码,并且服务器支持多客户端连入,并且可以指定与个别客户端发 ...
- 有趣的RPC理解
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通 ...
- javaweb基础整理随笔------jstl与el表达式
虽然jsp中可以写java代码,但是现在不推荐这么做. jsp虽然本质是servlet,但是主要作用只是视图,视图的任务就是显示响应,而不是在JSP中做任何关于程序控制和业务逻辑的事情.所以在JSP页 ...
- 【KakaJSON手册】02_JSON转Model_02_数据类型
由于JSON格式的能表达的数据类型是比较有限的,所以服务器返回的JSON数据有时无法自动转换成客户端想要的数据类型. 比如服务器返回的时间可能是个毫秒数1565480696,但客户端想要的是Date类 ...
- git submodule 子模块
### 背景:为什么要用子模块? 在开发项目中可能会遇到这种问题:在你的项目中使用另一个项目,也许这是一个第三方开发的库,或者是你独立开发的并在多个父项目中使用的.简单来说就是A同学开发了一个模块,被 ...
- 《机器学习技法》---核型SVM
(本文内容和图片来自林轩田老师<机器学习技法>) 1. 核技巧引入 如果要用SVM来做非线性的分类,我们采用的方法是将原来的特征空间映射到另一个更高维的空间,在这个更高维的空间做线性的SV ...
- js-获取屏幕的中各种宽高
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...
- 用python解析JSON
先来认识下JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使 ...
- VSCode 使用Settings Sync同步配置(最新版教程,非常简单)
VSCode 使用Settings Sync同步配置(最新版教程,非常简单) 之前无意中听到有人说,vsCode最大的缺点就是每次换个电脑或者临时去个新环境,就要配置一下各种插件,好不麻烦,以至于面试 ...