답안 #525674

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
525674 2022-02-12T13:20:11 Z Josia Paths (RMI21_paths) C++17
19 / 100
600 ms 120164 KB
#include <bits/stdc++.h>

using namespace std;
#define int int64_t



vector<pair<int, int>> parents;
vector<vector<pair<int, int>>> graph;
vector<int> order;
int n, k;


void generateParents(int v, int p, int weight) {
    if (parents[v].first != -1) return;

    parents[v].first = p;
    parents[v].second = weight;

    for (auto u: graph[v]) {
        if (parents[u.first].first != -1) continue;
        generateParents(u.first, v, u.second);
    }
    order.push_back(v);
}



int stl(int v) {
    vector<multiset<int>> tree(n, {0});  // offset, options

    // vector<int> pointers;

    // for (int i = 0; i<n; i++) pointers.push_back(i);

    order.pop_back();

    for (int i: order) {
        int newElem = *prev(tree[i].end()) + parents[i].second;
        tree[i].erase(*prev(tree[i].end()));
        tree[i].insert(newElem);

        auto it = tree[i].begin();

        while (it != tree[i].end()) {
            tree[parents[i].first].insert(*it);
            it++;
        }
    }



    // cerr << "root element: ";

    // for (int i: tree[v]) {
    //     cerr << i << " ";
    // } cerr << "\n";


    int res = 0;

    auto it = tree[v].end();

    for (int i = 0; i<k; i++) {
        it = prev(it);
        res += *it;
    }

    return res;
}



void solve() {
    
    cin >> n >> k;
    graph.resize(n);

    for (int i = 0; i<n-1; i++) {
        int a, b, c; cin >> a >> b >> c;
        a--; b--;
        graph[a].push_back({b, c});
        graph[b].push_back({a, c});
    }


    for (int i = 0; i<n; i++) {
        // cerr << i << " ----------------------\n";

        parents.clear();
        parents.assign(n, {-1, 0});
        order.clear();

        generateParents(i, -2, 0);

        // cerr << "order: ";
        // for (auto i: order) {
        //     cerr << i << " ";
        // } cerr << "\n";

        // cerr << "parents: ";
        // for (auto i: parents) {
        //     cerr << i.first << " ";
        // } cerr << "\n";

        assert(order.back() == i);

        int res = stl(i);

        cout << res << "\n";
        // cerr << "result: " << res << "\n";
    }
    


}

signed main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);

    solve();

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 36 ms 440 KB Output is correct
4 Correct 125 ms 784 KB Output is correct
5 Correct 20 ms 332 KB Output is correct
6 Correct 102 ms 716 KB Output is correct
7 Correct 46 ms 536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 36 ms 440 KB Output is correct
4 Correct 125 ms 784 KB Output is correct
5 Correct 20 ms 332 KB Output is correct
6 Correct 102 ms 716 KB Output is correct
7 Correct 46 ms 536 KB Output is correct
8 Execution timed out 1068 ms 1280 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 36 ms 440 KB Output is correct
4 Correct 125 ms 784 KB Output is correct
5 Correct 20 ms 332 KB Output is correct
6 Correct 102 ms 716 KB Output is correct
7 Correct 46 ms 536 KB Output is correct
8 Execution timed out 1068 ms 1280 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1022 ms 120164 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 36 ms 440 KB Output is correct
4 Correct 125 ms 784 KB Output is correct
5 Correct 20 ms 332 KB Output is correct
6 Correct 102 ms 716 KB Output is correct
7 Correct 46 ms 536 KB Output is correct
8 Execution timed out 1068 ms 1280 KB Time limit exceeded
9 Halted 0 ms 0 KB -