http://poj.org/problem?id=1182

r[x] = 0 表示x和父亲是同类
r[x] = 1 表示x吃父亲
r[x] = 2 表示x被父亲吃
因为只存在三种动物,且三种动物构成了环形
所以动物之间的关系是可推导的。

如图:

c与a的关系为(r[b] + r[c])%3; b与父亲a的关系可为0,1,2      c与父亲b的关系为0,1,2 。每种取值时,自己在纸上推导一下,就能得到这个关系。

路径压缩的时候就要用到这个关系来修改r[c],

如何判断 D a b 是不是假话呢?   当fa == fb 时。说明动物a和b都在一个集合里。那么可以推导它们之间的关系

我们已知两条黑线,我们要求得是红线2,即a与b的关系。  如果知道红线1,那么推导a和b的关系,那么就和上面那个图一样

红线1 = (3 - r[b])%3;  这个枚举一下r[b]的取值,然后推一下就知道了

所以如果  (r[a] + 3-r[b])%3==d-1  那么就是真话

如果fa!=fb。 那么就要合并两个集合

。道理和上面一样,先求红线1,然后求红线2,继而求出红线3.然后合并两个集合

 1 #include <stdio.h>
 2 int father[55555],r[55555];
 3
 4 void init(int n)
 5 {
 6     for(int i=1; i<=n; ++i)
 7     {
 8         father[i] = i;
 9         r[i] = 0;
10     }
11 }
12
13 int find(int x)
14 {
15     if(x==father[x]) return father[x];
16     int t = find(father[x]);
17     r[x] = (r[father[x]] + r[x])%3;
18     father[x] = t;
19     return father[x];
20     /*
21     路径压缩时关系的推导,r[father[x]] 是father[x]和根结点的关系,r[x]是x和father[x]的关系
22     */
23 }
24 int main()
25 {
26     int n,k,i,d,x,y,ans,fx,fy;
27     scanf("%d%d",&n,&k);
28     {
29         ans = 0;
30         init(n);
31         for(i=0; i<k; ++i)
32         {
33             scanf("%d%d%d",&d,&x,&y);
34             if(x>n || y>n ||(d==2 && x==y)) ans++;
35             else
36             {
37                 fx = find(x);
38                 fy = find(y);
39                 if(fx==fy)
40                 {
41                     if((r[x]+3-r[y])%3!=d-1) ans++;
42                 }
43                 else
44                 {
45                     father[fx] = fy;
46                     //r[fy] = (r[x]-r[y]+d-1+3)%3;
47                         r[fx] =  (d-1+r[y]-r[x])%3;
48                 }
49             }
50         }
51         printf("%d\n",ans);
52     }
53     return 0;
54 }

转载于:https://www.cnblogs.com/justPassBy/p/4312729.html

poj1182食物链(种类并查集)相关推荐

  1. POJ1182 食物链 —— 种类并查集

    题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  2. Bailian1182 POJ1182 食物链【并查集】

    1182:食物链 描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...

  3. POJ-1182 食物链(并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 75814   Accepted: 22528 Description ...

  4. POJ1182 食物链【并查集】

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 72553   Accepted: 21542 Description ...

  5. POJ1182 食物链(并查集)

    [题目链接] http://poj.org/problem?id=1182 题目意思 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1 ...

  6. 食物链 (种类并查集)

    文章目录 食物链 思路 AC代码 食物链 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号. ...

  7. POJ1182 食物链---(经典种类并查集)

    题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  8. 食物链(种类并查集)

    一般我们的并查集是可以维护这样的关系的,比如亲戚的亲戚是亲戚,只需要简单调用并查集就可以实现.但如果我们现在想要维护一个这样的关系,比如敌人的敌人是朋友,那一般的并查集就不行了,对于一般的并查集而言, ...

  9. 【POJ - 1703】Find them, Catch them(带权并查集之--种类并查集 权为与父节点关系)

    题干: Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36176   Accep ...

  10. 【C语言】算法学习·种类并查集

    一般的并查集,维护的是具有连通性.传递性的关系,例如亲戚的亲戚是亲戚.但是,有时候,我们要维护另一种关系:敌人的敌人是朋友.种类并查集就是为了解决这个问题而诞生的. 我们先来看一个例题: 其实很容易想 ...

最新文章

  1. “libc++_shared.so“ not found 解决
  2. 关于面对对象和正则表达式的处理
  3. ASP.NET MVC中使用Autofac实现简单依赖注入
  4. 五种方法,教你如何在Mac上查看文件完整路径
  5. PHP 显示信息到控制台console
  6. Eclipse javax.servlet.jsp.PageContext cannot be resolved to a type 错误解决办法
  7. python在线学习直播-一对多直播系统开发,百万用户在线,直播弹幕系统是如何实现的?...
  8. 车子前进档为什么往后退_「前推倒车·后拉加速」自动挡的档杆为什么设计的这么奇怪?...
  9. 导弹拦截(NOIP2010 普及组第三题)
  10. 用Python执行SQL、Excel常见任务?10个方法全搞定!
  11. get_digits
  12. lwip---(六)ARP表
  13. Excel点击按钮隐藏指定行
  14. C++关于函数声明定义的位置
  15. 路由与交换 实验一 路由器基本配置
  16. java正则匹配下划线_正则表达式(匹配英文、中文、数字、下划线)
  17. 斯坦福大学iOS应用开发教程学习笔记(第六课)故事版 StoryBoard
  18. imx6ull移植Linux系统第二篇——Linux内核的移植
  19. 智能书包方案——智能书包重力测量模块CSM92F32
  20. intel历代架构演进6—— SIMD指令集

热门文章

  1. php使用webservivce_使用zeng studio 创建的php调用webservice soap简单实例
  2. sql科学计数法转换为普通数字_Python3数据类型之数字-Python入门到精通
  3. 信息服务器 iis 5.0,使用IIS 5.0调整Web服务器的艺术与科学(4)
  4. js 一个对象的属性名是一个变量如何设置和获取值
  5. 戴毅茹同济matlab,Stateflow系统建模(全)解读.pptx
  6. 从0开始学习自动化测试框架cypress(三)特性
  7. php5.4全局变量,PHP 5 全局变量 - 超全局变量
  8. oracle倒导数的条件过滤参数,oracle exp导出加上过滤条件
  9. 火车站售票系统_好消息!海门火车站自助售取票机增加自助退票功能
  10. Java服务器上显示图片问题_java,_服务器读取图片到jsp显示问题,java - phpStudy