社区讨论

AC on#1#3#4,其他TLE

P4234最小差值生成树参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mm5qrlla
此快照首次捕获于
2026/02/28 11:08
2 周前
此快照最后确认于
2026/03/02 11:05
上周
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
long long int a, b, ans, fa[200001], maxcost;
int fnd(int i) {
    if (fa[i] == i)
        return i;
    else
        return fa[i] = fnd(fa[i]);
}
struct oo {
    long long int u, v, w;
} edge[200001];
bool cmp(oo x, oo y) { return x.w < y.w; }
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ans = LONG_LONG_MAX;
    cin >> a >> b;
    for (int i = 1; i <= b; i++) {
        cin >> edge[i].u >> edge[i].v >> edge[i].w;
    }
    sort(edge + 1, edge + b + 1, cmp);
    for (int i = 1; i <= b; i++) {
        maxcost = 0;
        int cnt = 0;
        for (int j = 1; j <= a; j++) {
            fa[j] = j;
        }
        for (int j = i; j <= b; j++) {
            int p = fnd(edge[j].u);
            int q = fnd(edge[j].v);
            if (p == q) {
                continue;
            }
            maxcost = max(maxcost, edge[j].w);
            fa[p] = q;
            cnt++;
            if (cnt == a - 1)
                break;
        }
        if (cnt != a - 1) {
            continue;
        }
        ans = min(maxcost - edge[i].w, ans);
    }
    if (ans != LONG_LONG_MAX)
        cout << ans;
    else
        cout << -1;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...