Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

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 }

 

posted on 2011-12-01 21:48  Qiuqiqiu  阅读(119)  评论(0编辑  收藏  举报