并查集
CrZnGe
野百合
展开
-
洛谷——P1551 亲戚
题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。 输入格式 第一行:三个整数n,m,p,(n<=5000,m<=5000,p<=5000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系。 以下m行:每行两个数Mi,Mj,1<=Mi,Mj<=N,表示Mi和Mj具原创 2020-09-18 15:54:36 · 232 阅读 · 0 评论 -
洛谷——P3367 【模板】并查集
题目介绍 如题,现在有一个并查集,你需要完成合并和查询操作。 输入格式 第一行包含两个整数 N,M表示共有 N个元素和 M 个操作。 接下来 M 行,每行包含三个整数 Xi,Yi,Zi。 当Zi=1时,将 Xi和Yi所在的集合合并。 当Zi=2时,输出Xi和Yi是否在同一集合内,是的输出 Y 否则输出 N。 输出格式 对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为Y或者N。 输入输出样例 4 7 2 1 2 1 1 2 2 1 2 1 3 4 2 1 4 1 2 3 2 1 4 N Y原创 2020-09-18 11:22:07 · 184 阅读 · 0 评论 -
并查集部分模板
并查集部分模板 并查集的查询操作。 const int N=100001; int p[N]; int x,y; int find(int x)//查询操作,并且实现了路径压缩 { if(p[x]!=x) p[x]=find(p[x]); return p[x]; } 并查集的初始化 (让每个节点都等于自己所处的节点数)。 for(int i=1;i<=n;i++)//并查集的初始化 p[i]=i; 两个集合合并,即将一个集合插到另一个集合下。 x=find原创 2020-09-18 11:02:53 · 84 阅读 · 0 评论