poj2912(带权并查集+枚举)
题目链接:http://poj.org/problem?id=2912
题意:给n个人,m组关系,玩石头剪刀布的游戏,n个人中除一个人judge以外,其他人属于3个group(即石头、剪刀、布),他们只能出这一个手势,而judge可以随便出,要求能否找到judge和在第几组关系时能最先找到judge。
思路:poj1182食物链的进阶版,与那题不同的是,这里需要枚举0到n-1,枚举i假设其为judge,然后遍历不包含i的所有关系,如果符合条件,则i就是judge,否则其不是judge,记录其判断出不是judge的那条边line(后面要用),遍历结束之后,如果judge数目num<1,则Impossible,若num>1,则Can not determine,若num=1,则其为judge,但需要输出判断其为judge的最小的line,其实也就是其它非judge判断为非judge的边line的最大值,这里有点巧妙。
其余的就和食物链一样了,x->y=-1(<),0(=),1(>),且 x->z=(x->y+y->z+4)%3-1,公式自己手动算一下就明白了。
AC代码:
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 5 struct node{ 6 int x,y; 7 char c; 8 }a[2005]; 9 10 int n,m,root[505],f[505],ans[505],res,num; 11 12 int getr(int k){ 13 if(root[k]==k) return k; 14 else{ 15 int tmp=root[k]; 16 root[k]=getr(root[k]); 17 f[k]=(f[k]+f[tmp]+4)%3-1; 18 return root[k]; 19 } 20 } 21 22 int main(){ 23 while(~scanf("%d%d",&n,&m)){ 24 if(!m){ 25 if(n==1) 26 printf("Player 0 can be determined to be the judge after 0 lines\n"); 27 else 28 printf("Can not determine"); 29 continue; 30 } 31 memset(ans,0,sizeof(ans)); 32 num=0; 33 for(int i=1;i<=m;++i) 34 scanf("%d%c%d",&a[i].x,&a[i].c,&a[i].y); 35 for(int i=0;i<n;++i){ 36 bool flag=true; 37 for(int j=0;j<n;++j) 38 root[j]=j,f[j]=0; 39 for(int j=1;j<=m;++j){ 40 if(a[j].x!=i&&a[j].y!=i){ 41 int t1=a[j].x,t2=a[j].y,t3,r1,r2; 42 if(a[j].c=='<') t3=-1; 43 else if(a[j].c=='=') t3=0; 44 else t3=1; 45 r1=getr(t1),r2=getr(t2); 46 if(r1==r2){ 47 if(f[t1]!=(t3+f[t2]+4)%3-1){ 48 ans[i]=j; 49 flag=false; 50 break; 51 } 52 } 53 else{ 54 root[r2]=r1; 55 f[r2]=(-((t3+f[t2]+4)%3-1)+f[t1]+4)%3-1; 56 } 57 } 58 } 59 if(flag) 60 ++num,res=i; 61 } 62 if(num<1) 63 printf("Impossible\n"); 64 else if(num>1) 65 printf("Can not determine\n"); 66 else{ 67 int Max=0; 68 for(int i=0;i<n;++i) 69 if(ans[i]>Max) 70 Max=ans[i]; 71 printf("Player %d can be determined to be the judge after %d lines\n",res,Max); 72 } 73 } 74 return 0; 75 }
转载于:https://www.cnblogs.com/FrankChen831X/p/10659338.html
poj2912(带权并查集+枚举)相关推荐
- POJ 2912 Rochambeau(难,好题,枚举+带权并查集)
下面的是从该网站上copy过来的,稍微改了一点,给出链接:http://hi.baidu.com/nondes/item/26dd0f1a02b1e0ef5f53b1c7 题意:有N个人玩剪刀石头布, ...
- BZOJ 2303 方格染色(带权并查集)
要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...
- 2020CCPC(长春) - Ragdoll(启发式合并+带权并查集)
题目大意:初始时给出 n 个集合,每个集合中都包含有一个数字,现在要求执行 m 次操作,每次操作分为下列三种类型: 1 x y:在 x 位置新建一个集合,并且放置一个数字 y 2 x y:合并集合 x ...
- 【无码专区9】序列统计(带权并查集 + 前缀和建边 + dp)
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
- HDU 5176 The Experience of Love 带权并查集
The Experience of Love Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- 2017乌鲁木齐区域赛I(带权并查集)
#include<bits/stdc++.h> using namespace std; int f[200010];//代表元 long long rl[200010];//记rl[i] ...
- POJ1703带权并查集(距离或者异或)
题意: 有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作 1 D a b 给出a b 两个人不属于同一个帮派 2 A a b 问a b 两个人关系 输出 同一个帮派 ...
- POJ1988(带权并查集,搬砖块)
题意: 可以这样理解,有n快方形积木,一开始都是单独的放到哪,然后有两种操作 1 M a b 把a所在的那一堆落到b所在那一堆的上面(一开始自己是一堆) 2 C a 问a下面有多少个积木 ...
- LA3027简单带权并查集
题意: 有n个点,一开始大家都是独立的点,然后给出一些关系,a,b表示a是b的父亲节点,距离是abs(a-b)%1000,然后有一些询问,每次询问一个节点a到父亲节点的距离是多少? 思路: ...
最新文章
- 随心测试_软测基础_005 测试人员工作内容
- Nginx-08:Nginx配置高可用
- vba二维数组初始化_将工作表数据写入VBA数组
- LeetCode 1838. 最高频元素的频数(二分查找)
- jquery 获得table 行数
- jmeter debug sample不在查看结果树中显示_Jmeter线程组间传递参数
- Linux内核启动流程详解
- GPU — NVIDIA GPU 架构发展史
- 阿里巴巴普惠_阿里巴巴的普惠字体来了,再也不用担心版权问题了。
- 大数据是什么?多大的数据叫大数据?
- wdcp虚拟主机管理系统注入漏洞
- 【游戏逆向】老飞飞怀恋魅力爱玩等老飞飞瞬移分析代码
- T00ls Lpk Sethc 首创lpk劫持方式粘滞键后门,体积超小!
- w10系统服务器如何创建新用户,关于Win10怎么给本地账户添加管理员权限的讲解...
- 启用系统保护是灰色的#win10系统
- 强网杯2022 pwn 赛题解析——yakacmp
- java如何开发视频软件_使用JAVA编写视频播放器
- 【Maven】Maven的安装与下载
- 一文带你读懂,这三个交换机层级的区别和联系。
- 【BZOJ4716】假摔 二分+暴力
热门文章
- 唱好铁血丹心谐音正规_孩子想学唱歌?儿童声乐怎么学才好?
- 升级bios_ThinkPad如何升级BIOS?我来教你!
- 云平台管理与部署---虚拟化平台-----KVM
- android:inputtype有哪些类型,android:inputType参数类型说明
- linux文件明明存在却无法vim打开_教你几招,让你vim编辑器变得友善起来(特别水,不要点进来)...
- yii引入php文件,Yii2框架中CSS、JS文件引入要领_PHP开发框架教程
- abaqus画一个球 python_简单几步,100行代码用Python画一个蝙蝠侠的logo
- logstash mysql日期_logstash-input-jdbc取mysql数据日期格式处理
- python入门教程收藏_python入门教程:超详细保你1小时学会Python,快来收藏看看...
- matlab如何模拟竹蜻蜓飞行,JSBSim_Matlab 将 与 进行联合仿真 模拟飞行计算 247万源代码下载- www.pudn.com...