HDU1213+并查集

简单的并查集

View Code
 1 /*
 2 并查集
 3 */
 4 #include<stdio.h>
 5 #include<string.h>
 6 #include<stdlib.h>
 7 #include<algorithm>
 8 #include<iostream>
 9 #include<queue>
10 //#include<map>
11 #include<math.h>
12 using namespace std;
13 typedef long long ll;
14 //typedef __int64 int64;
15 const int maxn = 1005;
16 const int inf = 0x7fffffff;
17 const double pi=acos(-1.0);
18 const double eps = 1e-8;
19 int fa[ maxn ];
20 void init( int n ){
21     for( int i=1;i<=n;i++ )
22         fa[ i ]=i;
23 }
24 int find( int x ){
25     if( fa[x]==x ) return x;
26     fa[x]=find( fa[x] );
27     return fa[x];
28 }
29 void union_xy( int x,int y ){
30     int fa_x,fa_y;
31     fa_x = find( x );
32     fa_y = find( y );
33     if( fa_x>fa_y )
34         fa[ fa_y ]=fa_x;
35     else 
36         fa[ fa_x ]=fa_y;
37 }        
38 int main(){
39     int ca;
40     scanf("%d",&ca);
41     while( ca-- ){
42         int n,m;
43         scanf("%d%d",&n,&m);
44         init( n );
45         int a,b;
46         while( m-- ){
47             scanf("%d%d",&a,&b);
48             union_xy( a,b );
49         }
50         int cnt=0;
51         for( int i=1;i<=n;i++ ){
52             if( fa[i]==i )
53                 cnt++;
54         }
55         printf("%d\n",cnt);
56     }
57     return 0;
58 }
keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/2971830.html