Submission #1223765

#TimeUsernameProblemLanguageResultExecution timeMemory
1223765BestCrazyNoobToll (APIO13_toll)C++20
0 / 100
1 ms464 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>

using namespace std;
using ll = long long;
using pii = pair<int, int>;

struct Edge {
    int i, j, w;
};

int N, M, K;
vector<vector<pii>> tree;
vector<int> P;
ll res = 0;

bool setup(int curr, int prev, int tar, int w) {
    if (curr == tar) return true;
    for (auto &[c, cw]: tree[curr]) {
        if (c == prev) continue;
        if (setup(c, curr, tar, w)) {
            if (cw == -1) cw = w;
            return true;
        }
    }
    return false;
}

ll eval(int curr, int prev) {
    ll up = P[curr];
    for (auto [c, w]: tree[curr]) {
        if (c == prev) continue;
        const ll upc = eval(c, curr);
        res += w * upc;
        up += upc;
    }
    return up;
}

int main() {
    cin >> N >> M >> K;
    vector<Edge> edges(M);
    for (Edge &e: edges) {
        cin >> e.i >> e.j >> e.w;
        e.i--; e.j--;
    }
    vector<pii> add(K);
    for (pii &e: add) {
        cin >> e.first >> e.second;
        e.first--; e.second--;
    }
    P.resize(N);
    for (int &x: P) cin >> x;
    
    sort(edges.begin(), edges.end(), [](Edge a, Edge b) {return a.w < b.w;});

    tree.clear();
    tree.resize(N);
    for (int h = 0; h < K; h++) {
        tree[add[h].first].push_back({add[h].second, -1});
        tree[add[h].second].push_back({add[h].first, -1});
    }

    for (Edge e: edges) {
        if (!setup(e.i, -1, e.j, e.w)) {
            tree[e.i].push_back({e.j, 0});
            tree[e.j].push_back({e.i, 0});
        }
    }

    res = 0;
    eval(0, -1);

    cout << res << '\n';

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...