码迷,mamicode.com
首页 > 其他好文 > 详细

并查集的模板写法

时间:2020-01-16 21:45:30      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:turn   std   ace   const   判断   pac   algorithm   inf   stream   

 1 并查集:
 2 #include<utility>
 3 #include<iostream>
 4 #include<set>
 5 #include<map>
 6 #include<vector>
 7 #include<queue>
 8 #include<cmath>
 9 #include<algorithm>
10 const int MAX_E = 10001;
11 const int MAX_N = 10000;
12 const int INF = 999999;
13 using namespace std;
14 //先搞并查集:
15 int fa[MAX_N];
16 int Rank[MAX_N];
17 //一共n个元素
18 //初始化大小为n的并查集
19 void init(int n) {
20     for (int i = 0; i < n; i++) {
21         fa[i] = i;
22     }
23 }
24 //查询树的根
25 int find(int x) {
26        //这是使用了路径压缩的写法
27        return x == fa[x] ? x : fa[x] = find(fa[x]);
28        //如果不用路径压缩的话:
29        //return x == fa[x] ? x : find(fa[x]);
30 }
31 //合并x与y所在的集合
32 void unite(int x, int y) {
33        //先找祖宗
34        x = find(x);
35        y = find(y);
36        if (x == y)return;//如果本来就一组,就什么都不用干了
37        if (Rank[x] < Rank[y]) {
38               fa[x] = y;
39        }
40        else {
41               fa[y] = x;
42               if (Rank[x] == Rank[y])Rank[x]++;//如果一颗高一棵矮,最后的高度一定是原来高的那棵树的高度.如果两颗一样高,高度会变成原高度+1
43        }
44 }
45 //判断x与y是否属于同一集合
46 bool same(int x, int y) {
47        return find(x) == find(y);
48 }

并查集的模板写法

标签:turn   std   ace   const   判断   pac   algorithm   inf   stream   

原文地址:https://www.cnblogs.com/OldAtaraxi/p/12203166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!