题目链接

分析:根据分析,关系的递推满足由[a,b]~[b,c]得:[a,c]=([a,b]+[b,c])%3;[a,d]=([a,b]+[b,c]+[c,d])%3.由rank数组表示关系

0 - 这个节点与它的父节点是同类

1 - 这个节点被它的父节点吃

2 - 这个节点吃它的父节点。

则:当 d = 1的时候,( d - 1 ) = 0,也就是我们制定的意义

当 d = 2的时候,( d - 1 ) = 1,代表Y被X吃,也是我们指定的意义。

逆推根节点与Y的关系

这部分也是穷举法推出来的,我们举例:

父相对于子的relation(即假如子是父的父节点,那么父的relation应该是什么,因为父现在是根节点,所以父.relation = 0,我们只能根据父的子节点反推子跟父节点的关系)

0             ( 3 - 0 ) % 3 = 0

1(父吃子)   ( 3 - 1 ) % 3 = 2 //父吃子

2(子吃父)    ( 3 - 2 ) % 3 = 1 //子吃父,一样的

因此合并时,x,y,a(x的根节点),b(y的根节点),d(x与y的关系),rank[x](x与a的关系),rank[y](y与b的关系)rank[b](b与a的关系)则:

[b,a]=([b,y]+[y,x]+[x,a])%3.而[b,y]=(3-[y,b])%3.因此rank[b]=(3-rank[y]+d+rank[x]).

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-9
#define N 50010
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
int fa[N],rank[N];
int find(int x)
{if(x==fa[x])return x;int pa=fa[x];fa[x]=find(fa[x]);rank[x]=(rank[x]+rank[pa])%3;return fa[x];
}
void merge(int a,int b,int x,int y,int d)
{fa[b]=a;rank[b]=(3-rank[y]+d-1+rank[x])%3;
}
int main()
{int n,m;scanf("%d%d",&n,&m);for(int i=1; i<=n; i++){fa[i]=i;rank[i]=0;}int ans=0;while(m--){int d,x,y;scanf("%d%d%d",&d,&x,&y);if(x>n||y>n||(d==2&&x==y))ans++;else{int a=find(x);int b=find(y);if(a!=b)merge(a,b,x,y,d);else{if((rank[y]+3-rank[x])%3!=d-1)ans++;}}}printf("%d\n",ans);
}

View Code

转载于:https://www.cnblogs.com/lienus/p/4276184.html

poj1182(并查集)相关推荐

  1. 并查集/poj1182 noi2001食物链eat

    题意 有三类动物A,B,C,题中给出两种关系: 1 x y :x y 同类 2 x y :x吃y 对于假话的定义: 1.当前的话与前面的某些真的话冲突,就是假话: 2.当前的话中X或Y比N大,就是假话 ...

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

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

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

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

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

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

  5. poj1182 and 携程预赛2第一题 带权并查集

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

  6. poj1182(加权值的并查集)

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

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

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

  8. 并查集——食物链(poj1182)

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

  9. POJ1182 食物链(并查集)

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

  10. ACM模板——并查集

    #define _for(i,a,b) for(int i = (a);i < (b);i ++) const int maxn = 50003; int par[maxn]; //父亲 int ...

最新文章

  1. 为什么要读源代码,如何阅读源代码
  2. 彻底解决_OBJC_CLASS_$_某文件名“, referenced from:问题
  3. js在firefox中的问题
  4. MFC消息处理学习总结
  5. 【TensorFlow】笔记2:深层神经网络
  6. cocos2d-x游戏开发(一)开始菜单
  7. SAP UI5 Drop down list value changed
  8. JAVA面试常考系列五
  9. 微服务java模块内存管理_Java 9模块服务
  10. 明晚直播预告丨Oracle 19c X86下移经验分享
  11. 95-10-160-启动-KafkaApis
  12. 从主机 Windows 上无法远程访问 Linux 的 Tomcat 服务器解决方法
  13. ES6学习笔记二(解构赋值、语法糖)
  14. 图形面积用计算机软件计算方法,AutoCAD2018如何算面积 计算图形面积教程
  15. 离线语音识别与语音转写初探
  16. 咸鱼购买小米红米有锁机-完美解锁机有什么区别?MIUI解锁机升级系统
  17. python画气泡图_画气泡图的十二个图表库
  18. 华尔街远邻 | 解读国际清算银行对加密货币的暧昧态度
  19. esp32对接阿里云生活物联网平台 天猫精灵控制 云智能APP远程控制 ali-sdk开发
  20. 【Android】GestureDetector 类的手势操作方法含义

热门文章

  1. 线程池中线程抛了异常如何处理?
  2. netty的零拷贝、架构设计、ByteBuf扩容机制详解
  3. http 请求 超时时间设置
  4. 对今天下午的工作内容的反思
  5. Dubbo学习笔记(二)
  6. CentOS8.1 搭建jenkins
  7. Go 到底算不算一门面向对象的编程语言
  8. 教你如何做出自己想要的PHP Docker镜像
  9. Kafka2.12安装与配置/生产与消费
  10. 内存映射文件mmap原理分析