博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2912(带权并查集+枚举)
阅读量:5991 次
发布时间:2019-06-20

本文共 1725 字,大约阅读时间需要 5 分钟。

题目链接: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
2 #include
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 else28 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
1)65 printf("Can not determine\n");66 else{67 int Max=0;68 for(int i=0;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

你可能感兴趣的文章
css形变及动画
查看>>
药品监管系统架构揭秘:海量溯源数据存储与查询
查看>>
人工智能革命即将到来,但权力掌握在硅谷手中
查看>>
整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证
查看>>
推荐几个精致的前端UI框架
查看>>
递归和深拷贝 浅拷贝
查看>>
java Runtime.exec方法详解!
查看>>
架构设计之「 CAP 定理 」
查看>>
阿里巴巴IPv6应用平台引领下一代互联网
查看>>
区块链软件公司:区块链金融今后会如何发展
查看>>
阿里开源自用 OpenJDK 版本,Java 社区迎来中国力量
查看>>
企业级框架整合Springmvc+mybatis+restful+bootstrap
查看>>
(四)整合spring cloud云服务架构 - 企业分布式微服务云架构构建
查看>>
Unity(刚体)
查看>>
构建dubbo分布式平台-dubbo简介
查看>>
前端优化
查看>>
38. SQL -- 自动维护计划和管理表
查看>>
电脑常见小技巧
查看>>
usb安全管理
查看>>
我的友情链接
查看>>