http://acm.hdu.edu.cn/showproblem.php?pid=1232
1 #include <iostream>
2 #include <stdio.h>
3 #include <string.h>
4 #include <stdlib.h>
5 using namespace std;
6 int n,m;
7 int bin[2005];
8 int findx(int x)
9 {
10 int r=x;
11 while(bin[r]!=r)
12 {
13 r=bin[r];
14 }
15 int k,j;
16 k=x;
17 while(k!=r)
18 {
19 j=bin[k];
20 bin[k]=r;
21 k=j;
22 }
23 return r;
24 }
25 void merge(int x,int y)
26 {
27 int fx=findx(x);
28 int fy=findx(y);
29 if(fx!=fy)
30 bin[fx]=fy;
31 }
32 int main()
33 {
34 int x,y;
35 while(scanf("%d",&n)!=EOF&&n!=0)
36 {
37 scanf("%d",&m);
38 for(int i=1;i<=n;i++)
39 bin[i]=i;
40 while(m--)
41 {
42 scanf("%d%d",&x,&y);
43 merge(x,y);
44 }
45 int l=0;
46 for(int i=1;i<=n;i++)
47 {
48 if(findx(i)==i)
49 l++;
50 }
51
52 printf("%d\n",l-1);
53
54
55 }
56 return 0;
57 }
不知道为么,这样就WA
if(findx(x)!=findx(y))
merge(x,y);
http://acm.hdu.edu.cn/showproblem.php?pid=1213
1 #include <iostream>
2 #include <stdio.h>
3 #include <string.h>
4 #include <stdlib.h>
5 using namespace std;
6 int n,m;
7 int bin[2005];
8 int findx(int x)
9 {
10 int r=x;
11 while(bin[r]!=r)
12 {
13 r=bin[r];
14 }
15 int k,j;
16 k=x;
17 while(k!=r)
18 {
19 j=bin[k];
20 bin[k]=r;
21 k=j;
22 }
23 return r;
24 }
25 void merge(int x,int y)
26 {
27 int fx=findx(x);
28 int fy=findx(y);
29 if(fx!=fy)
30 bin[fx]=fy;
31 }
32 int main()
33 {
34 int x,y;
35 int T,K=0;
36 scanf("%d",&T);
37 while(T--)
38 {
39 K++;
40 scanf("%d%d",&n,&m);
41 for(int i=1;i<=n;i++)
42 bin[i]=i;
43 while(m--)
44 {
45 scanf("%d%d",&x,&y);
46 merge(x,y);
47 }
48 printf("\n");
49 int l=0;
50 for(int i=1;i<=n;i++)
51 {
52 if(findx(i)==i)
53 l++;
54 }
55 printf("%d\n",l);
56
57 }
58 return 0;
59 }