답안 #525675

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
525675 2022-02-12T13:41:54 Z Josia Paths (RMI21_paths) C++14
19 / 100
600 ms 45252 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[pointers[i]].end()) + parents[i].second;
        tree[pointers[i]].erase(*prev(tree[pointers[i]].end()));
        tree[pointers[i]].insert(newElem);

        if (tree[pointers[i]].size() > tree[pointers[parents[i].first]].size()) {
            swap(pointers[i], pointers[parents[i].first]);
        }

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

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



    cerr << "root element: ";

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


    int res = 0;

    auto it = tree[pointers[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 2 ms 204 KB Output is correct
2 Correct 2 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 204 KB Output is correct
2 Correct 2 ms 204 KB Output is correct
3 Correct 113 ms 552 KB Output is correct
4 Correct 106 ms 548 KB Output is correct
5 Correct 114 ms 608 KB Output is correct
6 Correct 106 ms 440 KB Output is correct
7 Correct 138 ms 452 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 204 KB Output is correct
2 Correct 2 ms 204 KB Output is correct
3 Correct 113 ms 552 KB Output is correct
4 Correct 106 ms 548 KB Output is correct
5 Correct 114 ms 608 KB Output is correct
6 Correct 106 ms 440 KB Output is correct
7 Correct 138 ms 452 KB Output is correct
8 Execution timed out 1085 ms 2940 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 204 KB Output is correct
2 Correct 2 ms 204 KB Output is correct
3 Correct 113 ms 552 KB Output is correct
4 Correct 106 ms 548 KB Output is correct
5 Correct 114 ms 608 KB Output is correct
6 Correct 106 ms 440 KB Output is correct
7 Correct 138 ms 452 KB Output is correct
8 Execution timed out 1085 ms 2940 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1086 ms 45252 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 204 KB Output is correct
2 Correct 2 ms 204 KB Output is correct
3 Correct 113 ms 552 KB Output is correct
4 Correct 106 ms 548 KB Output is correct
5 Correct 114 ms 608 KB Output is correct
6 Correct 106 ms 440 KB Output is correct
7 Correct 138 ms 452 KB Output is correct
8 Execution timed out 1085 ms 2940 KB Time limit exceeded
9 Halted 0 ms 0 KB -