1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
   | 
 
 
  #include<cstdio> int tree[50010];
  int find(int x) { 	return tree[x]<0?x:(tree[x]=find(tree[x])); }
  void uset(int a, int b) {     if((a=find(a))==(b=find(b)))                  return ;     if(tree[a]<tree[b])                tree[b]=a;     else if(tree[a]>tree[b])         tree[a]=b;     else     {         tree[a]=b;          } }
   int main()  {     int n,i,m,a,b, cas = 1;     while(scanf("%d%d",&n,&m) != EOF && n||m){         int ans = 0;         for(i=1;i<=n;i++)     		tree[i]=-1;       	  for(i=0;i<m;i++)         {             scanf("%d%d",&a,&b);             uset(a,b);                    }         for(int i = 1; i <= n; i++)         {             if(tree[i] < 0)                 ans++;         }         printf("Case %d: %d\n", cas++,ans);     }     return 0;  }
 
  |