您的位置:首页 > 其它

并查集防止爆栈

2015-06-26 10:16 141 查看
在并查集的时候经常遇到爆栈的情况,这里给推荐两种方法预防爆栈

①开外挂栈
#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 long
int 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: