Submission #528552

#TimeUsernameProblemLanguageResultExecution timeMemory
528552couplefireParkovi (COCI22_parkovi)C++17
110 / 110
1014 ms34980 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define f first
#define s second

const int N = 200005;

int n, k;
vector<pii> adj[N];
bool vis[N], park[N];

ll dfs(int v, int p, ll mid){
    if(v!=0 && (int)adj[v].size()==1)
        return 0;
    ll mn = 1e16, mx = -1e16;
    for(auto [u, w] : adj[v]){
        if(u==p) continue;
        ll val = dfs(u, v, mid);
        if(val==0ll && vis[u]){
            mn = min(mn, 0ll);
            mx = max(mx, 0ll);
            continue;
        }
        if(val+w<=0ll) vis[v] = 1, val += w;
        else if(val<0ll) val = 0;
        else val += w;
        if(val>mid){
            park[u] = 1;
            val = min(-mid+w, 0ll);
            if(-mid+w<=0ll) vis[v] = 1;
            vis[u] = 1;
        }
        mn = min(mn, val);
        mx = max(mx, val);
    }
    if(-mn>=mx) return mn;
    return mx;
}

int check(ll mid){
    memset(vis, 0, sizeof vis);
    memset(park, 0, sizeof park);
    if(dfs(0, 0, mid)>0) park[0] = 1;
    else if(!vis[0]) park[0] = 1;
    int cnt = 0;
    for(int i = 0; i<n; ++i)
        cnt += park[i];
    return cnt;
}

int main(){
    // freopen("a.in", "r", stdin);
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> k;
    for(int i = 0; i<n-1; ++i){
        int a, b, w;
        cin >> a >> b >> w;
        --a; --b;
        adj[a].push_back({b, w});
        adj[b].push_back({a, w});
    }
    ll lo = 0, hi = 1e16;
    while(lo<hi){
        ll mid = lo+(hi-lo)/2;
        if(check(mid)<=k) hi = mid;
        else lo = mid+1;
    }
    cout << lo << '\n';
    check(lo);
    vector<int> res;
    for(int i = 0; i<n; ++i)
        if(park[i]) res.push_back(i);
    for(int i = 0; i<n; ++i)
        if(!park[i] && (int)res.size()<k)
            res.push_back(i);
    for(auto x : res)
        cout << x+1 << ' ';
    cout << '\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...