并查集防止爆栈

来源:互联网 发布:做淘宝如何提高销量 编辑:程序博客网 时间:2024/06/06 20:13

在并查集的时候经常遇到爆栈的情况,这里给推荐两种方法预防爆栈

①开外挂栈

#pragma comment(linker, "/STACK:1024000000,1024000000") 
②增加一个数组用来保存结点的熵值,使得根节点离子结点平摊下来的距离最小,主要在合并的时候需要用到

if(cou[fa]>cou[fb]){        f[fb]=fa;    }    else {        f[fa]=fb;        cou[fb]++;    }


下面是模板

#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio>#include<cstring>#include<algorithm>#include<stdlib.h>#include<vector>#include<stack>#include<queue>#include<map>#include<string>#include<cmath>#include<iostream>using namespace std;#define LL long long#define ULL unsigned long longint f[100005],cou[100005];int res;int find(int x){    if(f[x]!=x)        f[x] =find(f[x]);    return f[x];}void Union(int a,int b){    int fa = find(a);    int fb = find(b);    if(fa==fb) return false;    //并查集熵低的当父亲     if(cou[fa]>cou[fb]){        f[fb]=fa;    }    else {        f[fa]=fb;        cou[fb]++;    }}int main(void){            return 0;}


0 0
原创粉丝点击