【模板】并查集

寻找父亲:

int getfather(int v)
{
	if (father[v]!=v) //如果他不是父结点
	  father[v]=getfather(father[v]); //找到他的父结点,并且将每个孩子连到父亲那里,即路径压缩 
    return father[v]; //返回他的父亲 
} 

合并两个集合:

void unionxy(int x,int y) //合并两个集合 
{
	x=getfather(x);
	y=getfather(y);//找他们两个的父亲,即父结点
	father[x]=y;//将他们两个的父亲合并起来,即合并两个集合 
}

判断两个元素是否在同一集合:

bool judge(int x,int y) //判断他们是否在同一个集合 
{
	x=getfather(x);
	y=getfather(y);//找到他们各自的父结点 
	if (x==y) return true;//如果他们的父结点是一样的,就说明他们属于同一个集合 
	else return false; //不一样就说明他们不在同一个集合 
}

你可能感兴趣的:(并查集,模板)