标签:style blog http color os io for ar art
第一道并查集,听起来很高大上的样子,其实也不难理解
我感觉并查集的精髓就在那个路径压缩上面,将叶子节点直接指向根
并:将两个集合合并在一起
查:查询某个元素是否在该集合中
题意:已知0号同学染病了,那么和他同在一个集合的同学也都可能染病了,输出可能染病的总人数
标准的并查集,模板题
1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 const int maxn = 30000 + 10; 8 int total[maxn], parent[maxn]; 9 int n, m, k; 10 11 int GetParent(int a) 12 { 13 if(parent[a] != a) 14 parent[a] = GetParent(parent[a]); 15 return parent[a]; 16 } 17 18 void Merge(int a, int b) 19 { 20 int p1 = GetParent(a); 21 int p2 = GetParent(b); 22 if(p1 == p2) 23 return; 24 total[p1] += total[p2]; 25 parent[p2] = p1; 26 } 27 28 int main(void) 29 { 30 #ifdef LOCAL 31 freopen("1611in.txt", "r", stdin); 32 #endif 33 34 while(scanf("%d%d", &n, &m) == 2 && (m+n)) 35 { 36 for(int i = 0; i < n; ++i) 37 { 38 parent[i] = i; 39 total[i] = 1; 40 } 41 for(int i = 0; i < m; ++i) 42 { 43 int h, s, t; 44 scanf("%d%d", &h, &s); 45 for(int j = 1; j < h; ++j) 46 { 47 scanf("%d", &t); 48 Merge(s, t); 49 } 50 } 51 printf("%d\n", total[GetParent(0)]); 52 } 53 return 0; 54 }
标签:style blog http color os io for ar art
原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/3931816.html