poj2524(简单并查集)
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; int n,m; int bin[50001]; int findx(int x) { int r=x; while(r!=bin[r]) r=bin[r]; int j=x,k; while(j!=r) { k=bin[j]; bin[j]=r; j=k; } return r; } void merge(int x,int y) { int fx=findx(x); int fy=findx(y); if(fx!=fy) bin[fy]=fx; } int main() { int x,y,k=0; while(scanf("%d%d",&n,&m)!=EOF) { k++; if(n==0&&m==0) break; for(int i=0;i<=n;i++) bin[i]=i; while(m--) { scanf("%d%d",&x,&y); merge(x,y); } int sum=0; for(int i=1;i<=n;i++) if(bin[i]==i) sum++; printf("Case %d: %d\n",k,sum); } return 0; } 来源: