hdu 2120

Posted LMissher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 2120相关的知识,希望对你有一定的参考价值。

题意:求连通块中有多少个环。

题解:如果两数的祖先相同则总数加1,否则合并。

 

代码:

#include <cstdio>
int pre[2100],sum[2100],tot;
int
find(int x){
    int
r = x;
    while
(pre[r] != r){
        r = pre[r];
    }

    int
i = x, j;
    while
(i != r){
        j = pre[i];
        pre[i] = r;
        i = j;
    }

    return
r;
}

void
join(int x,int y){
    int
fx=find(x);
    int
fy=find(y);
    if
(fx!=fy)
        pre[fy]=fx;
    else
tot++;
}


int
main(){
    int
n,m;
    while
(scanf("%d%d",&n,&m)!=EOF){
        int
a,b;
        for
(int i = 0; i < n; i++)
        {

            pre[i] = i;
        }

        tot=0;
        for
(int i=0;i<m;i++){
            scanf("%d%d",&a,&b);
            join(a,b);
        }

        printf("%d\n",tot);
    }

    return
0;
}

以上是关于hdu 2120的主要内容,如果未能解决你的问题,请参考以下文章

HDU-4819-Mosaic(二维线段树)

HDU4612:Warm up(缩点+树的直径)

HDU 4578(线段树

线段树 区间更新 HDU1698

hdu 3308(线段树区间合并)

hdu 1806(线段树区间合并)