zoj 1789 The Suspects

这道题是并查集的题,写过这道题之后,我明白了一点,就是从根上改变所属father域可怜

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<math.h>



int p[30000+100];

int a[30000+100];



int find(int x)

{

    if(p[x] == x)

       return x;

    p[x] = find(p[x]);

    return p[x];

}



int main()

{

   int n,m,k,i,count,temp;

   while(scanf("%d%d",&n,&m) == 2,n*n+m*m)

   {

      for(i=0;i<n;i++)

      p[i] = i;

      while(m--)

      {

        scanf("%d",&k);

        for(i=0;i<k;i++)

          scanf("%d",&a[i]);

        for(i=0;i<k-1;i++)

             if(find(p[a[i]]) != find(p[a[i+1]]))

                 p[find(p[a[i+1]])] = find(p[a[0]]);

      }

      count = 0;

      for(i=0;i<n;i++)

      if(find(i) == find(0))

        count++;

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

   }

   return 0;

}




 

 

你可能感兴趣的:(ZOJ)