title: 并查集
author: BbiHH
tags:
- ACM_汇总
categories: - template
- 并查集
date: 2019-08-13 16:16:00
(原创)
板子
#include <bits/stdc++.h>
using namespace std;
int t[1007];
int _rank[1007]={0};
//初始化父节点为自己
void func1(int n)
{
for(int i=1; i<=n; i++)
t[i]=i;
}
//寻找祖宗
int Find(int i)
{
if(t[i]==i)
return i;
else
return t[i]=Find(t[i]);
}
//合并集合
void unite(int x,int y)
{
x = Find(x);
y = Find(y);
if(x == y)
return ;
//深度大的为父节点
if(_rank[x]<_rank[y])
t[x]=y;
if(_rank[x]>_rank[y])
t[y]=x;
//当深度相同时,随便哪个都可,当注意深度+1
else
{
t[y]=x;
_rank[x]++;
}
}