hdu 1213 How Many Tables(水题)

#include <stdio.h>
#include <string.h>
#define MAXN 1003
int father[MAXN];
bool table[MAXN];
int find(int x)
{
    int i,t;
    for(i=x; father[i]>0; i=father[i]) ;
    while(x!=i)
    {
        t=father[x];
        father[x]=i;
        x=t;
    }
    return i;
}
void merge(int x,int y)
{
    int fx=find(x),fy=find(y);
    if(fx==fy) return;
    if(father[fx]>father[fy])
    {
        father[fy]+=father[fx];
        father[fx]=fy;
    }
    else
    {
        father[fx]+=father[fy];
        father[fy]=fx;
    }
}
int main()
{
    int T,N,M,i,j;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&N,&M);
        {
            memset(father,-1,sizeof(*father)*(N+1));
            memset(table,false,sizeof(*table)*(N+1));
            while(M--)
            {
                scanf("%d %d",&i,&j);
                merge(i,j);
            }
        }
        for(i=1; i<=N; i++)
            table[find(i)]=true;
        int sum=0;
        for(i=1; i<=N; i++)
            if(table[i]) sum++;
        printf("%d\n",sum);
    }
    return 0;
}

posted @ 2010-08-27 19:00  菜到不得鸟  阅读(236)  评论(0)    收藏  举报