杭电 1213 How Many Tables

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int n,m;

int set[1010];

struct val

{

   int x,y;

}e[1010];

int find(int x)

{

    return x==set[x] ? x : find(set[x]);

}

int main()

{

    int t,x,y;

    while(scanf("%d",&t)!=EOF)

    {

       while(t--)

       {

            scanf("%d%d",&n,&m);

            for(int i=1;i<=n;i++)

            {

                set[i]=i;

            }

            for(int i=1;i<=m;i++)

            {

                scanf("%d%d",&x,&y);

                e[i].x=x,e[i].y=y;

            }

            for(int i=1;i<=m;i++)

            {

                 x=e[i].x,y=e[i].y;

                 int a=find(x),b=find(y);

                 if(a!=b)

                 {

                     set[a]=b;

                 }

            }

            int f=0;

            for(int i=1;i<=n;i++)

            {

                 if(set[i]==i)

                 {

                     f++;

                 }

            }

            printf("%d\n",f);

       }

    }

    //system("pause");

    return 0;

}

你可能感兴趣的:(table)