
P1551 亲戚 - 洛谷
若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 规定: x 和 y 是亲戚, y 和 z 是亲戚,那么 x 和 z 也是亲戚。 如果 x, y 是亲戚,那么 x 的亲戚都是 y 的亲戚, y 的亲戚也都是 x 的亲戚。 第一行:三个整数 n,m,p,(n,m,p ≤ 5000),分别表示有 n 个人, m 个亲戚关系,询问 p 对亲戚关系。 以下 m 行:每行两个数 M i, M j, 1 ≤ M i, M j ≤ n,表示 M i 和 M j 具有亲戚关系。 接下来 …
并查集——亲戚 (洛谷 P1551) - CSDN博客
2021年9月27日 · 题目选自 洛谷P1551 并查集 入门题目,简单有趣的例子了解并查集的使用 主要分为三个操作: 1)初始化 没有什么说的,就是用下标当做标号。 2)合并操作 如果两个关系的“老大”不一样,就将其中一个“归顺”到另一个“老大”去。 3)查询操作
洛谷 - P1551 亲戚(并查集介绍)_若某个家族人员过于庞大,要判 …
2022年1月21日 · 并查集是一种很简洁的 数据结构,主要作用于 元素分类 的问题,它存放了一堆一堆的 不相交的集合,并可对其进行 创建 、 查询 和 合并 三种操作。 创建:假如有n个元素,我们用一个 数组 a [n]来储存每一个元素的父节点(因为每个元素字可能有一个父节点),一开始我们要令它们的父节点为自己。 a[i] = i; 查询:查询两个元素是否为同一集合。 合并:将题目所描述的两个本不相关的元素合并成一个集合。 a[find (x)] = find (y); 并查集最核心的思想在于 用集 …
洛谷-P1551 亲戚 - yuzec - 博客园
2020年12月24日 · 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 规定: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具有亲戚关系。 接下来p …
P1551 亲戚——并查集【模板】 - xiins - 博客园
2025年2月17日 · 这是一个典型的并查集应用问题,我们可以使用并查集来解决判断两个人是否为亲戚的问题。 以下是使用 C++ 实现的代码: vector<int> parent; parent. resize (n + 1); parent[i] = i; parent[x] = find (parent[x]); parent[rootX] = rootY; cin >> n >> m >> p; cin >> Mi >> Mj; uf. unionSet (Mi, Mj); cin >> Pi >> Pj; cout << "Yes" << endl; } else { cout << "No" << endl;
洛谷P1551 亲戚 题解 并查集入门题 - quanjun - 博客园
2020年2月16日 · 题目链接: "https://www.luogu.com.cn/problem/P1551" 解题思路 这道题是最基础的并查集入门题。 我们甚至可以不适用并查集的路径优化。
【并查集】P1551 亲戚 - CSDN博客
4 天之前 · 文章浏览阅读81次。比较基础的并查集题目,只需判断是否属于同一祖先,不需要统计数量。
P1551 亲戚题解 - 洛谷专栏
2024年8月17日 · 给出 n 个点和 m 条边,以及 q 次询问,每次询问 i,j 是否在同一个图中。 首先把图存起来(这里我用了 vector)。 然后对于每次询问,从 i 点开始遍历,是否能到达 j 点。 但是,这样跑时间复杂度极高: O(qnm),TLE 到自闭。 在上述方法中,我们可以发现:有许多点被遍历了多次,那我们可以把 n 都遍历一次,这样对于每次询问只需要 O(1) 的时间复杂度。 如何遍历呢? 我们可以初始化每个人的祖先是自己,对于每次遍历到的两个点,把两人的祖先合并为较小的 …
洛谷P1551 找亲戚(并查集基础) - 代码先锋网
☞洛谷P1551-亲戚☜ 大意 规定假设x,y是亲戚,x,z是亲戚,那么x,z是亲戚。 现给定n个人,m个亲戚关系,p次询问,判断两人是否为亲戚。
P1551 亲戚题解 - 糖豆爸爸 - 博客园
2021年8月6日 · const int N = 5010; int n; //n个人 int m; //m个亲戚 int p; //询问p对亲戚关系 int x, y; //输入两个人之间的关系 int fa[N]; //并查集数组 //要深入理解这个递归并压缩的过程 int find(int x) { if (fa[x] != x)//如果x不是族长,递归找父亲,副产品就是找回的结果更新掉自己的家族信息。 fa[x] = find(fa[x]);//非常经典的更新,路径压缩大法! //返回族长是谁 return fa[x]; //加入家族集合中 void join(int c1, int c2) {