一、题目描述
二、算法分析说明与代码编写指导
在 Kruskal 之前,先将已经修过的路连的点都并入并查集。
三、AC 代码
#include<cstdio>
#include<algorithm>
#include<bitset>
#pragma warning(disable:4996)
using namespace std;
template<size_t n> class union_find {
private:
unsigned root[n]; int rank[n];
public:
union_find<n>() {
init(); }
union_find<n>(const bool& WannaInit) {
if (WannaInit == true)init(); }
void init() {
fill(rank, rank + n, 1); for (unsigned i = 0; i < n; ++i)root[i] = i;
}
void init(const size_t& _n) {
fill(rank<