제출 #1132969

#제출 시각아이디문제언어결과실행 시간메모리
1132969vladiliusPaths (RMI21_paths)C++20
0 / 100
1094 ms10052 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second

struct ST{
    vector<ll> a;
    int n;
    ST(int ns){
        n = ns;
        a.resize(n + 1);
    }
    void upd(int p, ll x){
        a[p] = x;
    }
    void upd(int l, int r, int x){
        for (int i = l; i <= r; i++){
            a[i] += x;
        }
    }
    pii get(){
        pii mx = {0, 0};
        for (int i = 1; i <= n; i++){
            mx = max(mx, {a[i], i});
        }
        return mx;
    }
};

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n, k; cin>>n>>k;
    vector<pii> g[n + 1];
    for (int i = 1; i < n; i++){
        int x, y, w; cin>>x>>y>>w;
        g[x].pb({y, w});
        g[y].pb({x, w});
    }
    
    vector<int> tin(n + 1), tout(n + 1), W(n + 1), P(n + 1);
    vector<ll> d(n + 1);
    int timer = 0;
    function<void(int, int)> fill = [&](int v, int pr){
        P[v] = pr;
        tin[v] = ++timer;
        for (auto [i, w]: g[v]){
            if (i == pr) continue;
            W[i] = w;
            d[i] = d[v] + w;
            fill(i, v);
        }
        tout[v] = timer;
    };
    
    ST T(n);
    vector<int> inv(n + 1);
    vector<bool> used(n + 1);
    for (int i = 1; i <= n; i++){
        timer = d[i] = 0;
        fill(i, 0);
        for (int j = 1; j <= n; j++){
            T.upd(tin[j], d[j]);
            inv[tin[j]] = j;
            used[j] = 0;
        }
        used[i] = 1;
        int tt = k;
        ll out = 0;
        while (tt--){
            auto [vv, p] = T.get();
            if (!vv) break;
            out += vv;
            p = inv[p];
            while (!used[p]){
                used[p] = 1;
                T.upd(tin[p], tout[p], -W[p]);
                p = P[p];
            }
        }
        cout<<out<<"\n";
    }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...