并查集用于判断两元素是否属于同一集合,合并两个不同集合,可用于判断图的连通性
int father[maxn]; //存储每个节点的父节点
int getfather(int a) //找到元素在并查集中的根节点
{
if(father[a]==a) return a; //如果该元素是并查集中的根节点,那么规定它的父节点为节点本身。(无论它是否是空树)
father[a]=getfather(father[a]); //路径压缩,使树不退化成一条链,扁平化每棵树
return father[a];
}
void merge(int x, int y) //合并两个元素
{
int fx=getfather(x), fy=getfather(y);
if(fx!=fy) father[fx]=fy;
}