题目链接: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[];
  9.  
  10. int n,m,root[],f[],ans[],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]+)%-;
  18. return root[k];
  19. }
  20. }
  21.  
  22. int main(){
  23. while(~scanf("%d%d",&n,&m)){
  24. if(!m){
  25. if(n==)
  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,,sizeof(ans));
  32. num=;
  33. for(int i=;i<=m;++i)
  34. scanf("%d%c%d",&a[i].x,&a[i].c,&a[i].y);
  35. for(int i=;i<n;++i){
  36. bool flag=true;
  37. for(int j=;j<n;++j)
  38. root[j]=j,f[j]=;
  39. for(int j=;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=-;
  43. else if(a[j].c=='=') t3=;
  44. else t3=;
  45. r1=getr(t1),r2=getr(t2);
  46. if(r1==r2){
  47. if(f[t1]!=(t3+f[t2]+)%-){
  48. ans[i]=j;
  49. flag=false;
  50. break;
  51. }
  52. }
  53. else{
  54. root[r2]=r1;
  55. f[r2]=(-((t3+f[t2]+)%-)+f[t1]+)%-;
  56. }
  57. }
  58. }
  59. if(flag)
  60. ++num,res=i;
  61. }
  62. if(num<)
  63. printf("Impossible\n");
  64. else if(num>)
  65. printf("Can not determine\n");
  66. else{
  67. int Max=;
  68. for(int i=;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 ;
  75. }

poj2912(带权并查集+枚举)的更多相关文章

  1. POJ - 2912 Rochambeau (带权并查集+枚举)

    题意:有N个人被分为了三组,其中有一个人是开了挂的.同组的人的关系是‘=’,不同组的人关系是‘<’或'>',但是开了挂的人可以给出自己和他人任意的关系.现在要根据M条关系找出这个开了挂的人 ...

  2. poj2912 带权并查集

    题意:多个人玩石头剪刀布,每个人提前选定了自己出哪个手势,而其中有一种特殊的人他可以随意出什么手势,问是否能够从给出的一系列石头剪刀布游戏中判断出哪个是特殊的,可以从第几局游戏中判断出来. 首先按照食 ...

  3. POJ 2912 Rochambeau(难,好题,枚举+带权并查集)

    下面的是从该网站上copy过来的,稍微改了一点,给出链接:http://hi.baidu.com/nondes/item/26dd0f1a02b1e0ef5f53b1c7 题意:有N个人玩剪刀石头布, ...

  4. POJ2912:Rochambeau(带权并查集)

    Rochambeau Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5208   Accepted: 1778 题目链接:h ...

  5. Lightoj1009 Back to Underworld(带权并查集)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Back to Underworld Time Limit:4000MS      ...

  6. HDU 5176 The Experience of Love 带权并查集

    The Experience of Love Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  7. poj 1733 Parity game(带权并查集+离散化)

    题目链接:http://poj.org/problem?id=1733 题目大意:有一个很长很长含有01的字符串,长度可达1000000000,首先告诉你字符串的长度n,再给一个m,表示给你m条信息, ...

  8. luogu 2294 狡猾的商人 带权并查集

    此题做法多啊 带权并查集,区间dp,前缀和,差分约束 1.自己写的前缀和, 11 #include<bits/stdc++.h> #define rep(i,x,y) for(regist ...

  9. poj1417(带权并查集+背包DP+路径回溯)

    题目链接:http://poj.org/problem;jsessionid=8C1721AF1C7E94E125535692CDB6216C?id=1417 题意:有p1个天使,p2个恶魔,天使只说 ...

随机推荐

  1. yum-cron更新 CentOS yum update 不升级内核版本方法

    http://www.360doc.com/content/15/0608/17/15798950_476597844.shtml 相关yum-cron说明有一些 CentOS yum update ...

  2. node 支持es6

    安装  babel-cli, 全局安装 npm install babel-cli -g 然后 在工程目录下 安装 npm install babel-cli --save npm install b ...

  3. java 常用第3方工具

    https://www.cnblogs.com/chenpi/p/5608628.html#_label4

  4. linux 任务调度

    crontab 定时任务 -e  编辑 -l  查看 -r  删除 参数 * * * * * 分钟  小时  天数   月   星期几

  5. System.Types.hpp(77): E2029 'TObject' must be a previously defined class or struct

    System.Types.hpp System.Types.hpp(77): E2029 'TObject' must be a previously defined class or struct ...

  6. gitlab入门

    目录 git下载 注册ssh git客户端及图形化工具tortoisegit下载: git客户端安装: https://git-scm.com/download   (git客户端 此种需要命令行执行 ...

  7. MFC中在picture control中显示CBitmap图像的方法

    CStatic *pStatic1 = (CStatic *)GetDlgItem(IDC__IMAGE_STATIC2); CBitmap cbmp; cbmp.LoadBitmap(MAKEINT ...

  8. 16.1 用auth0服务 实现用登录和管理 使用auth版本的2个大坑。

    这是三周内容,实现用户登录和管理 回到master分支 切换到 han分支 更新一下 然后工作 开始工作写代码了 安装2个angular端的auth0的lib,也可不安装,后边有不安装的做法 不安装的 ...

  9. PS-Lite源码分析

    PS-Lite源码分析 http://blog.csdn.net/kangroger/article/details/73307685

  10. css3选择器补充

    一.关系选择器 1.E+F   (E元素下一个满足条件的兄弟元素节点) <style> div + p{ background-color:red;// 第一个p元素变色 } </s ...