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; }
|