POJ 1182 食物链
Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u
Description
现有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
以下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
1 //并查集加点东西,注意负数 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int fa[50500]; 6 int right[50500]; 7 int find(int x){ 8 if(fa[x]==x) return x; 9 int tmp=fa[x]; 10 fa[x]=find(fa[x]); 11 right[x]+=right[tmp]; 12 right[x]%=3; 13 return fa[x]; 14 } 15 int main() 16 { 17 int n,m,k,a,b; 18 scanf("%d%d",&n,&m); 19 memset(right,0,sizeof(right)); 20 for(int i=1;i<=n;i++) fa[i]=i; 21 int ans=0; 22 for(int i=1;i<=m;i++){ 23 scanf("%d%d%d",&k,&a,&b); 24 if(a>n||b>n) {ans++;continue;} 25 int x=find(a); 26 int y=find(b); 27 if(k==1){ 28 if(x==y){ 29 if(right[a]!=right[b]) ans++; 30 }else 31 fa[y]=x, 32 right[y]=(right[a]-right[b]+3)%3; 33 }else 34 if(x==y){ 35 if((right[a]+1)%3!=right[b]) ans++; 36 }else 37 fa[y]=x, 38 right[y]=(right[a]-right[b]+3+1)%3; 39 40 } 41 printf("%d\n",ans); 42 return 0; 43 }
转载于:https://www.cnblogs.com/shenben/p/5459895.html
POJ 1182 食物链相关推荐
- POJ 1182 食物链 [并查集 带权并查集 开拓思路]
传送门 P - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit ...
- poj 1182 食物链 并查集
转自一位大佬的最全题解 https://blog.csdn.net/c0de4fun/article/details/7318642 #include <cstdio> #include ...
- POJ 1182 食物链,并查集的拓展
http://poj.org/problem?id=1182 /******************************************************** 此道题目 前天看的时候 ...
- poj 1182 食物链 (并查集)
http://poj.org/problem?id=1182 重点依旧是用rank记录相对于根节点的关系,并及时跟新rank的值. code: #include<cstdio> using ...
- POJ 1182 食物链
食物链是一道经典的并查集题,这道题难在怎么确定两个动物之间的关系. 看了罗德安大神的分析,有种豁然开朗的感觉. 问题分析: 我们把已经确立了关系的动物分到一个群落里,对于每一个提到的两个数字编号, 看 ...
- POJ 1182 食物链 (并查集解法)(详细注释)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 78510 Accepted: 23396 Description 动物王 ...
- POJ 1182 食物链(并查集+偏移向量)题解
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 82346 Accepted: 24616 Description ...
- poj 1182 食物链的一种解法(详解),非向量法
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 54761 Accepted: 16056 Description ...
- poj 1182 食物链(高级的带权并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 76486 Accepted: 22742 Description ...
- 拆点并查集(poj 1182: 食物链)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 76605 Accepted: 22779 Description ...
最新文章
- 卷积神经网络(CNN)原理
- 研究院引进:博士70万;硕士40万
- web前端——html基础笔记 NO.12{css布局模型(流动,浮动,层模型)}
- 玩转CSDN博客之自定义博客栏目,根据需要定制栏目
- PHP算法基于相同键合并数组
- 实战 | 离线搭建CDH6.20平台 踩坑实录
- GirlsInAI 近期计划,求扩散,欢迎大家转起来!
- 跨境电商独立站门槛高,为什么还有无数人挤破头想入坑!
- ftp 批量上传文件命令
- SPSS数据录入【SPSS 007期】
- linux windows并发模型,LINUX环境并发服务器的三种实现模型
- 【资料】Shell脚本学习指南
- 长等线,中等线,正等线,细等线,扁宋,扁等线
- LPC2478时钟模块详解
- stm32霍尔编码器
- 我的2020java社招岗面经,阿里巴巴社招面试经历(Java工程师方向)
- vue2路由手动创建二级路由路由传参路由守卫打包上线
- 在python中get是什么意思_python get函数有什么作用?示例解析
- day23 三升序列
- 邮件服务器怎么使用,Winmail Mail Server邮件服务器软件怎么使用
热门文章
- Android Studio搭建Tensorflow Lite项目和加载tflite模型文件
- 个人博客系统的设计与实现_一个标星近 10k 的现代化的个人独立博客系统,程序员值得拥有...
- leetcode 125 valid-palindrome
- 一段有趣的python小代码(将numpy中的数组转化为可哈希的字典)
- 长链剖分算法完整总结
- 优化无极限:从96秒到1.5秒
- Rocket - tilelink - AtomicAutomata
- 设置Kafka集群的方法
- 预科阶段:快速实战入门
- Linux下如何实现对某个文件夹进行压缩