poj1182(并查集)
题目链接
分析:根据分析,关系的递推满足由[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(并查集)相关推荐
- 并查集/poj1182 noi2001食物链eat
题意 有三类动物A,B,C,题中给出两种关系: 1 x y :x y 同类 2 x y :x吃y 对于假话的定义: 1.当前的话与前面的某些真的话冲突,就是假话: 2.当前的话中X或Y比N大,就是假话 ...
- POJ1182 食物链---(经典种类并查集)
题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- Bailian1182 POJ1182 食物链【并查集】
1182:食物链 描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...
- POJ-1182 食物链(并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 75814 Accepted: 22528 Description ...
- poj1182 and 携程预赛2第一题 带权并查集
题意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...
- poj1182(加权值的并查集)
Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它 ...
- POJ1182 食物链 —— 种类并查集
题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- 并查集——食物链(poj1182)
题目链接: http://poj.org/problem?id=1182 题目描述: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以 ...
- POJ1182 食物链(并查集)
[题目链接] http://poj.org/problem?id=1182 题目意思 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1 ...
- ACM模板——并查集
#define _for(i,a,b) for(int i = (a);i < (b);i ++) const int maxn = 50003; int par[maxn]; //父亲 int ...
最新文章
- 为什么要读源代码,如何阅读源代码
- 彻底解决_OBJC_CLASS_$_某文件名“, referenced from:问题
- js在firefox中的问题
- MFC消息处理学习总结
- 【TensorFlow】笔记2:深层神经网络
- cocos2d-x游戏开发(一)开始菜单
- SAP UI5 Drop down list value changed
- JAVA面试常考系列五
- 微服务java模块内存管理_Java 9模块服务
- 明晚直播预告丨Oracle 19c X86下移经验分享
- 95-10-160-启动-KafkaApis
- 从主机 Windows 上无法远程访问 Linux 的 Tomcat 服务器解决方法
- ES6学习笔记二(解构赋值、语法糖)
- 图形面积用计算机软件计算方法,AutoCAD2018如何算面积 计算图形面积教程
- 离线语音识别与语音转写初探
- 咸鱼购买小米红米有锁机-完美解锁机有什么区别?MIUI解锁机升级系统
- python画气泡图_画气泡图的十二个图表库
- 华尔街远邻 | 解读国际清算银行对加密货币的暧昧态度
- esp32对接阿里云生活物联网平台 天猫精灵控制 云智能APP远程控制 ali-sdk开发
- 【Android】GestureDetector 类的手势操作方法含义