pku 2524
经典的并查集运用,不解释
要提高代码的正确率呀!!!!!!!!!!!!!!!!!!!!!!!!
#include<stdio.h> #define N 55000 int set[N]; int find(int a) { int i,j,r; i=a; r=a; while(r!=set[r]) r=set[r]; while(i!=r) { j=set[i]; set[i]=r; i=j; } return r; } void merge(int a,int b) { int x,y; x=find(a); y=find(b); if(x!=y) set[x]=y; } int main() { int i,j=0,n,m,x,y,count; while(scanf("%d%d",&n,&m)&&n&&m) { j++; for(i=1;i<=n;i++) set[i]=i; while(m--) { scanf("%d%d",&x,&y); merge(x,y); } count=0; for(i=1;i<=n;i++) if(set[i]==i) count++; printf("Case %d: %d\n",j,count); } return 0; }