图论基础知识 并查集/例题

并查集

学习记录自代码随想录

并查集可以解决的问题:

并查集常用来解决连通性问题。
判断两个元素是否在同一个集合里的时候,要想到用并查集。
并查集主要有两个功能:
1.将两个元素添加到一个集合中;
2.判断两个元素在不在同一个集合。

代码模板

int n = 1005;  // 节点数量大于题目要求一点即可
vector<int> father(n, 0);

// 并查集初始化
void init(){
   
	for(int i = 0; i < n; i++){
   
		father[i] = i;
	}
}

// 并查集寻根过程
int find(int u){
   
	return u == father[u] ? u : father[u] = find(father[u]);
}

// 判断u和v是否是同一个根,同一个根则在同一个集合
bool isSameRoot(int u, int v){
   
	u = find(u);
	v = find(v);
	return u == v;
}

// 将v-u这条边加入并查集
void join(int u, int v){
   
	u = find(u);
	v = find(v);
	// 同一个根则说明在同一个集合,不需要节点相连
	if(u == v) return;
	father[v] = u;
}

例题:20240410 Huawei机考


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值