http://acm.hdu.edu.cn/showproblem.php?pid=1232
and check Set
#include <stdio.h> #include <iostream> #include <math.h> #include <stdlib.h> #include < ctype.h> #include <algorithm> #include <vector> #include <string.h> #include <queue># include<stack> #include <set> #include <map> #include <sstream> #include <time.h># include<utility> #include <malloc.h> #include <stdexcept>using namespace Std;int n,m;int p[10000]; int b [10000];int find (int x) {if (x==p[x]) return x; else return find (P[x]);} int fa,fb;void un (int x,int y) {fa=find (p[x]); Fb=find (P[y]); if (FA!=FB) {if (FA>FB) P[FA]=FB; else P[FB]=FA; }}int Main () {while (scanf ("%d%d", &n,&m)!=eof && N) {for (int i=1;i<=n;i++) P[i]=i; int sum=0; int A, B; for (int i=1;i<=m;i++) {scanf ("%d%d", &a,&b); Un (a, b); } for (int i=1;i<=n;i++) {if (p[i]==i) sum++; } printf ("%d\n", sum-1); } return 0;}
hdu-1232 unblocked Project