hdu1213 How Many Tables

求合并后的集合个数。

include<stdio.h>
#include<string.h>

int pre[1005];
int Set;

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

void join(int a,int b)
{
    int r_a = find(a);
    int r_b = find(b);
    if(r_a != r_b)
    {
        pre[r_a] = r_b;
        Set--;
    }
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        Set = n;
        memset(pre,0,sizeof(pre));
        for(int i = 1; i <= n; i++)
            pre[i] = i;
        while(m--)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            join(a,b);
        }
        printf("%d\n",Set);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/feynmanz/article/details/80224099
今日推荐