QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#315035#8136. Rebellious Edgereal_sigma_team#WA 0ms3648kbC++231.5kb2024-01-26 19:48:452024-01-26 19:48:46

Judging History

你现在查看的是最新测评结果

  • [2024-01-26 19:48:46]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3648kb
  • [2024-01-26 19:48:45]
  • 提交

answer

#include<bits/stdc++.h>

using namespace std;

struct edge {
    int w, u, v;
};
bool operator<(edge a, edge b) {
    return a.w < b.w;
}
struct DSU {
    int cnt;
    vector<int> p;
    DSU() = default;
    DSU(int n) : cnt(n), p(n, 0) {
        iota(p.begin(), p.end(), 0);
    }

    int get(int u) {
        return u == p[u] ? u : p[u] = get(p[u]);
    }

    bool unite(int u, int v) {
        u = get(u), v = get(v);
        if (u == v) return 0;
        --cnt;
        p[v] = u;
        return 1;
    }
};

void solve() {
    int n, m;
    cin >> n >> m;
    vector<edge> e;
    edge ss;
    for (int i = 0; i < m; ++i) {
        int u, v, w;
        cin >> u >> v >> w;
        --u, --v;
        if (u < v) e.push_back({w, u, v});
        else ss = {w, u, v};
    }
    sort(e.begin(), e.end());
    long long ans = LLONG_MAX;
    {
        DSU dsu(n);
        long long cur = 0;
        for (auto [w, u, v] : e) {
            cur += w * dsu.unite(u, v);
        }
        if (dsu.cnt == 1) ans = min(ans, cur);
    }
    {
        DSU dsu(n);
        long long cur = ss.w;
        for (auto [w, u, v] : e) {
            if (dsu.get(u) == dsu.get(ss.u) && dsu.get(v) == dsu.get(ss.v)) continue;
            cur += w * dsu.unite(u, v);
        }
        if (dsu.cnt == 1) ans = min(ans, cur);
    }
    cout << ans << '\n';
}

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);

    int t;
    cin >> t;
    while (t--) solve();
}

详细

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3648kb

input:

3
5 6
1 2 4
1 3 2
2 3 0
3 4 1
4 5 1
5 2 1
4 4
1 2 4
1 3 6
1 4 8
4 2 1000000
3 3
1 2 100
2 1 10
2 3 1000

output:

4
18
1100

result:

wrong answer 1st numbers differ - expected: '5', found: '4'