Kruskal 重构树模板
知识点
- Kruskal 算法
- LCA(倍增LCA或者Trajan算法)
模板
这里使用用倍增LCA。例题为:P1967 火车运输。
除了Kruskal求生成树含在main函数里面,其他都已经用结构体封装好。
#include <bits/stdc++.h>
using namespace std;
#define all(x) std::begin(x), std::end(x)
const int MAXN = 1e6 + 10;
int n, m;
vector<int>g[MAXN];
inline void pushedge(int u, int v) {
g[u].push_back(v);
}
int tot = 0;
int W[MAXN] = {
};
// 并查集
struct Dset {
vector<int>dad;
void inti(int size) {
dad.assign(size + 1, -1);
}
int &operator [] (int i) {
return dad[i];
}
int Find(int v) {
if (dad[v] != - 1) {
return dad[v] = Find(dad[v]);
}
return v;
}
bool Union(int a, int b) {
a <