POJ 2912 Rochambeau(暴力)+【带权并查集】
<题目链接>
题目大意:
n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000),接下来m行形如x, y, ch的输入,ch='='表示x, y平局,ch='>'表示x赢y,ch='<'表示x输y, 但是我们不知道x, y的手势是什么; 其中有一个人是裁判,它可以出任意手势,其余人手势相同的分一组,共分为三组,可以存在空组,也就是说除了裁判外,其余人每一次出的手势都相同,问能不能确定裁判是几号,如果能,输出最少在第几轮可以确定;
解题分析:
由于直接对所给的条件进行并查集处理,不容易直接找出符合要求的裁判,所以我们不妨暴力枚举裁判,因为裁判可以随便出,所以包含裁判的语句要直接跳过,不能作为判断冲突的条件,然后我们就可以遍历所有的条件,如果在当前遍历的裁判情况下,这些语句不产生冲突,说明当前遍历的裁判是可行的,裁判数量+1。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = +;
const int M = 2e3+;
int rnk[N],father[N];
int arr[M],brr[M],n,m;
char ss[M];
void init(){
for(int i=;i<n;i++){
father[i]=i;
rnk[i]=;
}
}
int find(int x){
if(father[x]==x)return x;
int tmp=father[x];
father[x]=find(father[x]);
rnk[x]=(rnk[x]+rnk[tmp]+)%;
return father[x];
}
int Union(int a,int b,int c){
int ra=find(a),rb=find(b);
if(ra==rb){ //如果根相同就直接判断是否冲突
if((rnk[a]-rnk[b]+)%!=c)return ; //冲突
return ;
}
father[ra]=rb;
rnk[ra]=(c-rnk[a]+rnk[b]+)%; //利用矢量,构造ra-->rb之间的rnk关系
return ;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=;i<=m;i++){
scanf("%d%c%d",&arr[i],&ss[i],&brr[i]);
}
int num=,loc=,ord=;
for(int i=;i<n;i++){ //暴力枚举裁判
init();
bool flag=true;
for(int j=;j<=m;j++){
if(arr[j]==i||brr[j]==i)continue; //因为裁判可以任意出,不会与其他人产生冲突,所以遇到裁判就跳过
int c;
if(ss[j]=='=')c=;
else if(ss[j]=='<')c=;
else c=;
if(Union(arr[j],brr[j],c)){ //判断是否出现矛盾
loc=max(j,loc); //(难点)维护矛盾出现的最大行数,因为如果最后只有一个裁判的话,说明其他的都不是裁判,而这里记录的每个枚举出的裁判出现矛盾的最小行数,所以,最后如果要使这些裁判全部出现矛盾的话,就记录下这些最小行数的最大值
flag=false;
break;
}
}
if(flag){
num++; //如果没有矛盾,说明这个人可以为裁判
ord=i; //记录下裁判的序号
}
}
if(!num)printf("Impossible\n");
else if(num>)printf("Can not determine\n");
else printf("Player %d can be determined to be the judge after %d lines\n", ord, loc);
}
return ;
}
2018-10-03
POJ 2912 Rochambeau(暴力)+【带权并查集】的更多相关文章
- 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 3228 Gold Transportation(带权并查集,好题)
参考链接:http://www.cnblogs.com/jiaohuang/archive/2010/11/13/1876418.html 题意:地图上某些点有金子,有些点有房子,还有一些带权路径,问 ...
- POJ 1182 食物链(带权并查集)
传送门 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65579 Accepted: 19336 Descri ...
- POJ 1984 - Navigation Nightmare - [带权并查集]
题目链接:http://poj.org/problem?id=1984 Time Limit: 2000MS Memory Limit: 30000K Case Time Limit: 1000MS ...
随机推荐
- LeetCode(102):二叉树的层次遍历
Medium! 题目描述: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 ...
- 【python】安装hyperscan-python
环境centos6.2 1. 先安装hyperscan 主要参考http://blog.csdn.net/cheng_fangang/article/details/51143412 注意:里面2.8 ...
- C# Parallel并发执行相关问题
1.Parallel并发执行 using System;using System.Collections.Generic;using System.Linq;using System.Text;usi ...
- python(5):scipy之numpy介绍
python 的scipy 下面的三大库: numpy, matplotlib, pandas scipy 下面还有linalg 等 scipy 中的数据结构主要有三种: ndarray(n维数组), ...
- MySQL is running but PID file could not be found(解决方法)
启动MySQL时报错: [root@xzw /]# service mysqld status MySQL is running but PID file could not be found ...
- linux:安装Memcache并使用
1.Linux安装Memcache : curl -O http://memcached.org/files/memcached-1.5.4.tar.gz 解压 2.启动Memcache: memca ...
- IDEA中tomcat的部署
创建一个项目就要部署tomcat
- IDEA 创建Spring MVC项目搭建
概述 IntelliJ IDEA是一款更加集成智能的开发工具,相对Myeclipse开发而言,使用起来相对更加的方便:初步手动使用IDEA搭建Spring MVC项目,现将操作流程整理记录如下. 环境 ...
- vs code 前端如何以服务器模式打开 [安装服务器] server insteall
首先要安装 vs code 和 node.js(既然是前端就必须回,不会的面壁思过)然后在命令符中输入 npm install -g live-server 进行安装,(简单的NPM安装)安装成功后在 ...
- gcc make 与cmake
1. gcc (1)是什么? 它是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器.它可以编译很多种编程语言(括C.C++.Objective-C.For ...