并查集模板整理
Posted passione-123456
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集模板整理相关的知识,希望对你有一定的参考价值。
不知道说些啥
#include<bits/stdc++.h> using namespace std; const int N=500010; int f[N]; int dep[N],siz[N]; int n,m; int F(int x){//递归版路径压缩 if(f[x]==x)return x; f[x]=F(f[x]); return f[x]; } int F(int x){//非递归版路径压缩 if(f[x]==x)return x; int goal=x; while(f[goal]!=foal)goal=f[goal]; int from=x; while(f[from]!=from){ int to=f[from]; f[from]=goal; from=to; } return goal; } //路径压缩改变了树的父子关系 不可逆 void U(int x,int y){//按秩合并(秩为深度) int A=F(x); int B=F(y); if(A!=B){ if(dep[A]<dep[B])swap(A,B); f[B]=A; dep[A]=max(dep[A],dep[B]+1); } } void U(int x,int y){//按秩合并(秩为大小) int A=F(x); int B=F(y); if(A!=B){ if(siz[A]<siz[B])swap(A,B); f[B]=A; siz[A]+=siz[B]; } } //按秩合并改变了树的形态 可逆 int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ f[i]=i; }//初始化 for(int i=1;i<=m;i++){ int x,y; scanf("%d%d",&x,&y); U(x,y); } }
可能还有些骚操作 待补
以上是关于并查集模板整理的主要内容,如果未能解决你的问题,请参考以下文章
带权并查集(含种类并查集)经典模板 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug's life(简单) ③hihoCoder 1515 : 分数调查(示例代码(代