并查集
并查集板子
#include<bits/stdc++.h>
using namespace std;
int s[10001];
void init_set()
{
for(int i=1;i<=10001;i++)
s[i]=i;
}
//路径压缩(递归)
int find_set(int x)
{
if(x!=s[x])
s[x]=find_set(s[x]);
return s[x];
}
void union_set(int x,int y)
{
x=find_set(x);
y=find_set(y);
if(x!=y)s[x]=s[y];
}
//非递归
int find_set1(int x)
{
int r=x;
while(s[r]!=r)r=s[r]; //找到根结点
int i=x,j;
while(i!=r)
{
j=s[i];
s[i]=r; //把路径上元素的集改为根结点
i=j;
}
return r;
}
int main()
{
return 0;
}