杭电 1232 畅通工程

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int set[1010];

int n,m;

struct val

{

    int x,y;

}e[1000000];

int find(int a)

{

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

}

int main()

{

   int x,y;

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

   {

       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;

       }

       int f=0;

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

       {

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

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

           if(a!=b)

           {

               set[a]=b;

               f++;

           }

       }

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

   }

   //system("pause");

   return 0;

}

你可能感兴趣的:(杭电)