#include <stdio.h> #define MAX 1005 int set[MAX]; int ans,n,m; int find(int x) { if(set[x]==x) { return x; } else { return set[x] = find(set[x]); } } int main() { while(scanf("%d%d",&n,&m) && n) { int i,x,y,fx,fy; ans = 0; for(i=1;i<=n;i++) { set[i] = i; } for(i=1;i<=m;i++) { scanf("%d%d",&x,&y); fx = find(set[x]); fy = find(set[y]); if(fx!=fy) { ans++; set[fy] = fx; } } printf("%d\n",n-1-ans); } return 0; }
998
#include <stdio.h> #include <string.h> #define MAX 1005 int set[MAX]; int vis[MAX]; int ans,n,m; int main() { while(scanf("%d%d",&n,&m)&&n) { int i,x,y,fx,fy; ans = 0; for(i=1;i<=n;i++) { set[i] = i; } for(i=1;i<=m;i++) { scanf("%d%d",&x,&y); fx = set[x]; fy = set[y]; if(fx!=fy) { set[fy] = fx; ans++; } } printf("%d\n",n-1-ans); } return 0; }