动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。
现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。
有人用两种说法对这N个动物所构成的食物链关系进行描述:
第一种说法是"1 X Y",表示X和Y是同类。
第二种说法是"2 X Y",表示X吃Y。
此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。
1) 当前的话与前面的某些真的话冲突,就是假话;
2) 当前的话中X或Y比N大,就是假话;
3) 当前的话表示X吃X,就是假话。
你的任务是根据给定的N(1 <= N <= 50,000)和K句话(0 <= K <= 100,000),输出假话的总数。
Input
第一行是两个整数N和K,以一个空格分隔。
以下K行每行是三个正整数 D,X,Y,两数之间用一个空格隔开,其中D表示说法的种类。
若D=1,则表示X和Y是同类。
若D=2,则表示X吃Y。
Output
只有一个整数,表示假话的数目。
Sample Input
100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5
Sample Output
3
其实大一暑假讲并查集的时候就做过这道题,但是当时不太理解,而且之后并查集的题目做的很少。就没再做。。
三种生物有可能会形成一个环,A吃B,B吃C,C吃A。
假如先出现的前两条,我们则认定是正确的(因为目前的条件判断不出是否错误)。但是加上第三条之后,我们怎么判断是否正确呢?三个生物之间的关系形成了一个环,那么他们之间的关系可以通过取模来确定。假如A与B之间是同类,那么他们之间的联系就是0,如果A吃B,那么他们之间的联系就是1,如果A吃B的父亲也吃B,那么A与B的父亲之间的联系就是2。

路径压缩之后:
代码如下:
poj的代码单组读入必须是单组读入,多组读入会wa。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<string>
using namespace std;const int maxx=5e4+100;
int f[maxx],dis[maxx];
int n,m;inline int getf(int u)
{int x;if(u!=f[u]){x=getf(f[u]);dis[u]=(dis[u]+dis[f[u]])%3;f[u]=x;}return f[u];
}
inline int merge(int u,int v,int val)
{int t1=getf(u);int t2=getf(v);if(t1==t2){if((dis[v]-dis[u]+3)%3!=val) return 1;else return 0;}else{f[t2]=t1;dis[t2]=(dis[u]-dis[v]+3+val)%3;return 0;}
}
int main()
{int x,y,op;scanf("%d%d",&n,&m);for(int i=0;i<=n;i++) dis[i]=0,f[i]=i;int ans=0;while(m--){scanf("%d%d%d",&op,&x,&y);if(x>n||y>n) ans++;else if(op==2&&x==y) ans++;else if(merge(x,y,op-1)) ans++;}printf("%d\n",ans);return 0;
}

努力加油a啊,(o)/~

食物链 POJ - 1182(带权并查集模板)相关推荐

  1. POJ - 1417 True Liars POJ - 141 带权并查集,01背包问题

    题目链接 POJ-1417 题意 岛上有说真话的好人和说假话的坏人,给你这两种人的人数.再给出q次问答结果,问答的格式是向a询问b是否是好人,回答是yes或者no.问是否可以分辨出全部好人,是的话打印 ...

  2. 2017乌鲁木齐ICPC: I. A Possible Tree(带权并查集)

    I. A Possible Tree Alice knows that Bob has a secret tree (in terms of graph theory) with n nodes wi ...

  3. 带权并查集 HDU - 3047

    题意: 一圈座位有n个,给出m组序号之间的关系,比如,1 2 150 代表2号坐在1号位置序号+150,看m组数据有多少组冲突的. 思路: 带权并查集模板. #include<stdio.h&g ...

  4. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

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

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

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

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

  7. 食物链(带权并查集)

    目录 题目描述 思路 完整代码 题目描述 动物王国中有三类动物 A,B,CA,B,C,这三类动物的食物链构成了有趣的环形.AA 吃 BB,BB 吃 CC,CC 吃 AA. 现有 NN 个动物,以 1 ...

  8. POJ 1984 Navigation Nightmare 【经典带权并查集】

    任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K To ...

  9. ACM练级日志:带权并查集与食物链

    最近终于干掉了高中两年都没有搞定的题目:食物链,就是那个A吃B,B吃C,C吃A这道NOI的经典题.当年自己写了200多行,把自己都写碎了,也没弄出来,最近学习了带权并查集,终于搞定了这道题. 首先说说 ...

最新文章

  1. AVGCN:利用人类注意力引导的图卷积网络进行轨迹预测
  2. PHP curl 模拟登录
  3. eventfd(三)
  4. 互联网日报 | 3月2日 星期二 | ​互联网人薪资报告:2021 开年薪资环比增长 7%...
  5. np.stack()函数详解 ==>堆叠 【类似于torch.stack()】
  6. 回炉重造-数据结构之数组列表
  7. win10调节屏幕分辨率导致黑屏
  8. 粗糙集的基础理论汇总
  9. Django总叙(转)
  10. 神经网络放大图片,神经网络AI滤镜
  11. 计算机游戏测试软件,你的电脑能不能吃鸡,两款软件很简单就能测试出来
  12. P8-图标字体-font-awesome-伪类-阿里图标字体icnfont-字体-行高-文本样式
  13. Tippy.js – 轻量的 Javascript Tooltip 工具库
  14. iVX低代码平台系列制作简单的登录界面
  15. 毕业实用统计模型(一)——时间序列
  16. ArcGIS for Android 100.3.0(10):Callout的使用
  17. Week 5.1 | 左倾红黑树LLRB | Princeton Algorithms
  18. 堡垒前线手游超强辅助脚本 新手入门技巧介绍
  19. linux C判断文件是否存在
  20. 5款剪辑视频,总有一款是你想要的!

热门文章

  1. stm32车牌识别_基于STM32单片机的车牌识别
  2. 剑指offer(23)二叉搜索树的后序遍历序列
  3. python web界面整合 tail_如何使用Python Tornado在HTTP上实现“ tail”?
  4. python自动化运维快速入门-Python自动化运维快速入门
  5. c语言在文本每一行末尾追加字符串,c语言在末尾添加 C语言 在链表尾部添加节点...
  6. [轮子系列]Google Guava之CharMatcher源码分析
  7. spring-boot 自定义启动图标彩蛋
  8. springboot+vue的前后端分离与合并方案
  9. 公布自己的pods到CocoaPods trunk 及问题记录
  10. 安卓拒绝服务漏洞分析及漏洞检测