标签:
Description
Input
Output
Sample Input
Sample Output
题目大意:
就是说,现在给你N个对象和T个关系,如果A和B有关系,B和C有关系,那么A和C也是有关系的。找出最后有几个这样不联通的集合.
解题思路:
直接裸裸的并查集,用并查集搞搞,直接出来,注意getf()和merge()函数的写法。
代码:
1 # include<cstdio> 2 # include<iostream> 3 4 using namespace std; 5 6 # define MAX 1004 7 8 int f[MAX]; 9 10 int getf ( int v ) 11 { 12 if ( f[v]==v ) 13 return v; 14 else 15 { 16 f[v] = getf(f[v]); 17 return f[v]; 18 } 19 } 20 21 22 void merge ( int v,int u ) 23 { 24 int t1 = getf(v); 25 int t2 = getf(u); 26 if ( t1!=t2 ) 27 { 28 f[t2] = t1; 29 } 30 } 31 32 int main(void) 33 { 34 int t;scanf("%d",&t); 35 while ( t-- ) 36 { 37 int n; 38 scanf("%d",&n); 39 for ( int i = 1;i <= n;i++ ) 40 { 41 f[i] = i; 42 } 43 int tt; 44 scanf("%d",&tt); 45 for ( int i = 1;i <= tt;i++ ) 46 { 47 int a,b; 48 scanf("%d %d",&a,&b); 49 merge(a,b); 50 51 } 52 int sum = 0; 53 for ( int i = 1;i <= n;i++ ) 54 { 55 if ( f[i]==i ) 56 sum++; 57 } 58 printf("%d\n",sum); 59 60 } 61 return 0; 62 }
HDU 1213 How Many Tables (并查集)
标签:
原文地址:http://www.cnblogs.com/wikioibai/p/4438366.html