无向图“最大找最小”,参见这个总结。
第一个,并查集。推荐用这个方法。
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
const int MAXN = 1e5 + 2;
int N, M;
int pre[MAXN];
struct Edge
{
Edge(int _n1, int _n2, int _days) :n1(_n1), n2(_n2), days(_days) {
}
int n1, n2, days;
bool operator<(const Edge& e) const
{
return days < e.days;
}
};
vector<Edge> ve;
int f(int x)
{
int f0 = x, f1 = x;
for (; pre[f0] > 0;) f0 = pre[f0];
for (; pre[f1] > 0;)
{
int t = f1;
f1 = pre[f1];
pre[t] = f0;
}
return f0