首页 > 其他分享 >并查集

并查集

时间:2024-07-27 16:19:52浏览次数:13  
标签:puts int 查集 else 节点 find

一共两个操作:合并和查询。
开始是没有并集的,得先合并再查询。

#include<iostream>
using namespace std;
const int N = 100010;

int p[N];
int n, m;

//p[x]=find(p[x]),直到找到它的祖宗节点,之后返回祖宗节点的值,
// 每个节点的父节点的值都会变成祖宗节点的值,至此实现了路径压缩。
int find(int x) {
	if (p[x] != x)p[x] = find(p[x]);
	return p[x];
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) p[i] = i;
	while (m--) 
	{
		char op[2];
		int a, b;
		cin >> op >> a >> b;

		if (op[0] == 'M')//合并操作
			p[find(a)] = find(b);
		else
		{
			if (find(a) == find(b))puts("yes");
			else puts("no");
		}
	}
}

各种并查集的扩展进阶

标签:puts,int,查集,else,节点,find
From: https://www.cnblogs.com/windzhao6/p/18327082

相关文章

  • 各种并查集
    并查集学习普通并查集用途:维护一个集合的连通性不用多说,下面的才是重点扩展域并查集用途:维护两个以上的集合的连通性。经典例题对于这个题,我们可以把人分成两个域:朋友域(\(1\)~\(n\))和敌人域(\(n+1\)~\(2n\))如果\(u,v\)是朋友,直接合并\(u,v\)。如果\(u,v\)是敌......
  • 并查集跳跃
    $\quad$在解决区间问题时,如果直接修改或者线段树不好维护且总共的有效修改很小时,我们就可以考虑使用并查集来解决问题。$\quad$问题中的各元素需要满足一定的条件,我们在遍历的时候,如果当前元素修改完之后仍然满足条件,那么我们就可以直接跳到后面的位置后面第一个满足条件的位......
  • 并查集——AcWing 239. 奇偶游戏
    目录并查集定义运用情况注意事项解题思路AcWing239.奇偶游戏题目描述运行代码代码思路改进思路并查集定义并查集(DisjointSetUnion,简称DSU),是一种树形的数据结构,常用于处理一些不交集的合并及查询问题。在并查集中,元素被分成多个不相交的集合,每个集合由一个代表......
  • 并查集的学习及运用
    1.定义在看并查集之前,我们先来看一下并查集是什么:并查集是一种用于管理元素所属集合的数据结构。它也有很多用途:在无向图中找环、判断连个元素是不是一个集合等等,所以用起来也十分方便,代码也很短2.模板intfind(intk){ if(vec[k]==k)returnk;//判断自己还有没有祖先 e......
  • 数据结构——并查集 学习笔记
    数据结构——并查集学习笔记并查集是一种用于管理元素所属集合的数据结构,实现为一个森林。并查集中,每棵树表示一个集合,树中的节点表示对应集合中的元素。其思想是,把集合属性绑定到根节点上,避免多余的处理,因此一般难以分离。普通并查集并查集支持两种操作:合并(Union):合并两个元素......
  • 并查集
    <2024.7.9>基本概念:主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中使用步骤:初始化,假设每个人指向自己根据每个人的意向确定边的连接选出一个集合的代......
  • 并查集扩展应用
    并查集扩展应用A.货物运输题目描述有\(n\)座城市和\(m\)条双向道路。已知走过每条边所需要的汽油量,\(q\)次询问,求汽油量为\(l\)的车可以在多少对城市之间运送货物。(汽车到达城市会立刻把油全部加满)题解这道题没有强制在线,所以可以考虑进行离线。对于大小为\(n\)一......
  • HT-014 Div3 跳棋 题解 [ 黄 ] [ 并查集 ] [ 树型结构 ]
    分析依旧是一个连通块题。观察题面不难发现两个重要性质:一个跳棋只能以它旁边的两个跳棋为中点跳跃,且满足跳跃路线中除中点以外没有其它跳棋阻挡。只有我们的跳棋可以移动。跳棋的操作具有可逆性/对称性。第三条性质可以这么理解,就是一个跳棋跳过去之后,它还可以跳回来。......
  • 【并查集】浅谈思想 & 代码实现 & 实战例题(C/C++)
    思想综述并查集(Union-Find)算法的主要操作包括两种:合并(Union):将两个不相交的集合合并成一个集合。查询(Find):查询两个元素是否属于同一个集合。并查集算法的核心思想是使用树(通常是森林)来表示这些不相交的集合,其中每个集合被表示为一棵树,树的根节点代表这个集合的标识(或称为代表......
  • 可撤销并查集
    给定n个结点,q次询问,每次询问分为三类:1xy,将x和y两个点连通,如果已经连通则不操作。2,撤销上一次连通操作,如果全部撤销完了则不操作。3xy,询问x和y是否连通。对于每个询问3,输出结果YES或NO。提示:可销撤并查集,使用按秩合并或启发式合并,不能用路径压缩。合并时记录操作的结点......