C

某个人举办生日宴会邀请了很多人来参加,不过呢,这些人有个毛病他们只会与熟悉人的坐在一起,当然他们也信奉朋友的朋友也是朋友这一法则,所以问最少需要多少张桌子......

好吧我承认这才是裸并查集.......没什么好说的,直接秒了吧

/////////////////////////////////////////////////////////////////////
#include<stdio.h>

const int maxn  = 1005;

int f[maxn];
int Find(int x)
{
    if(f[x] != x)
        f[x] = Find(f[x]);
    return f[x];
}

int main()
{
    int T;

    scanf("%d", &T);

    while(T--)
    {
        int i, N, M, u, v;

        scanf("%d%d", &N, &M);

        for(i=1; i<=N; i++)
            f[i] = i;

        while(M--)
        {
            scanf("%d%d", &u, &v);
            u = Find(u);
            v = Find(v);

            f[u] = v;
        }

        int ans = 0;

        for(i=1; i<=N; i++)
        {
            if(f[i] == i)
                ans++;
        }

        printf("%d ", ans);
    }

    return 0;
}
原文地址:https://www.cnblogs.com/liuxin13/p/4667627.html