模板/经典题型并查集维护生成树

Posted creed-qwq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板/经典题型并查集维护生成树相关的知识,希望对你有一定的参考价值。

这里的并查集是按秩合并并查集。
这种方法维护生成树的时候可以维护一个点到根的权值。
但是由于合并的时候做了一个类似换根一样的操作,因此这个权值通常只能是异或之类的。

//find-union-set
int top,f[N],v[N],sz[N],sk[M];
int find(int x){return x==f[x]?f[x]:find(f[x]);}
int value(int x){return x==f[x]?0:v[x]^value(f[x]);}
bool merge(int a,int b)
{
    int x=find(a),y=find(b);
    if(x==y)return false;
    if(sz[x]>sz[y])swap(x,y),swap(a,b);
    v[x]=value(a)^value(b)^1;
    f[x]=y;sz[y]+=sz[x];sk[++top]=x;
    return true;
}
void erase()
{
    int x=sk[top];
    sz[f[x]]-=sz[x];f[x]=x;v[x]=0;top--;
}


以上是关于模板/经典题型并查集维护生成树的主要内容,如果未能解决你的问题,请参考以下文章

[WC2005]双面棋盘(并查集+分治)

带权并查集(含种类并查集)经典模板 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug's life(简单) ③hihoCoder 1515 : 分数调查(示例代码(代

模板(最短路,最小生成树,并查集)

模板——最小生成树kruskal算法+并查集数据结构

最小生成树模板+并查集(隐藏)+结构体排序模板

并查集-解决区间和纠错问题 hdu-3038