http://acm.hdu.edu.cn/showproblem.php?pid=1232
赤裸裸的并查集
我的代码
1 #include <stdio.h>
2 const int N=1000;
3 int set[N];
4 int find(int x)
5 {
6 return set[x]==x ? x : set[x]=find(set[x]);
7 }
8 void merge(int x,int y)
9 {
10 set[find(x)]=find(y);
11 }
12 int main()
13 {
14 int n,m;
15 while (scanf("%d%d",&n,&m) && n)
16 {
17 int i;
18 for (i=1;i<=n;i++) set[i]=i;
19 while (m--)
20 {
21 int x,y;
22 scanf("%d%d",&x,&y);
23 merge(x,y);
24 }
25 int ans=-1;
26 for (i=1;i<=n;i++)
27 if (set[i]==i) ans++;
28 printf("%d\n",ans);
29 }
30 }