这里写的并查集较为基础,没有对路径进行处理…
没有压缩什么的,只有简单的合并和查找,
也太基础了吧…那在加上个判断吧…
3个月前就有学过并查集,不过做了好几个题都没有整理,现在碰到一个就几乎忘的差不多了,不过忘得快,拾起来也快。
看了看之前的代码还是很好懂的。
废话少说啦,上并查集的板子吧
//初始化
inline void inti(int n){
for(int i = 1; i <= n; ++i){
par[i] = i;
h[i] = 0;
}
}
//查找
int find(int x){
return x == par[x]? x: find(par[x]);
}
//合并
void unite(int x, int y){
x = find(x);
y = find(y);
if(h[x] < h[y]) par[x] = y;
else{
par[y] = x;
if(h[x] == h[y]) h[x]++;
}
}
//判断
bool same(int x, int y){
return find(X) == find(y);
}
h数组用来记树的的高度,路径压缩也很简单,在find函数里面就可以实现…emmm,…算了,一块补上吧。
int find(int x){
if(par[x] == x){
return x;
}
else{
return par[x] == find(par[x])
}
}
hahaha。。。眼熟的是因为学过白书了!