并查集模板

人盡茶涼 提交于 2020-01-31 18:28:40
int par[MAXN];//父节点
int sum[MAXN];
int Find(int x)
{
    if(par[x] != x)
        par[x] = Find(par[x]);
    return par[x];
}

void Union(int x,int y)    //合并x和y所在集合
{
    par[Find(x)] = Find(y);
}

int Abs(int a)
{
    return a>0?a:-a;
}

void Merge(int a,int b)    //合并a和b的集合(并查找集合个数)
{
    int x = Find(a);
    int y = Find(b);
    if(x!=y){
        par[y] = x;
        sum[x] += sum[y];
    }
}

double Dis(int a,int b)
{
    return sqrt( double(dx[a]-dx[b])*(dx[a]-dx[b]) + (dy[a]-dy[b])*(dy[a]-dy[b]) );
}

void init(int n)//初始化
{
    for(int i = 0;i <= n;i++){
        par[i] = i;
        sum[i] = 1;
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!