标签:jpg 简单的 logs 网上 函数 log 分享 swap ++
并查集是一种树型的数据结构,主要用来处理一些不相交集合的合并和更改问题。

比如找4的祖先,原来是 4->2->1,通过并查集路径压缩后,变为 4->1。也就变成了下图。

并查集的模板题:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
int dad[2000001];
int find(int x)//很简单的find函数,网上还有while版本的,手懒没抄= =
{
return dad[x]==x?x:dad[x]=find(dad[x]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)dad[i]=i;
for(int i=1;i<=m;++i)
{
int x,y,z;
scanf("%d%d%d",&z,&x,&y);
int X=find(x);
int Y=find(y);
if(z==1)
{
if(X!=Y)
{
dad[X]=Y;
}
}
else
{
if(X==Y) printf("Y\n");
else printf("N\n");
}
}
return 0;
}
按秩合并:
x=find(x); y=find(y) if(deep[x])>deep[y]) swap(x,y);//保证y的深度一定大于x dad[x]=y; deep[y]=max(deep[y],deep[x]+1);
标签:jpg 简单的 logs 网上 函数 log 分享 swap ++
原文地址:http://www.cnblogs.com/mljkw-gsry/p/7203443.html