Submission #537068

#TimeUsernameProblemLanguageResultExecution timeMemory
537068phathnvParkovi (COCI22_parkovi)C++11
110 / 110
1889 ms46580 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 10;
const long long INF = 1e18;

int n, k;
vector<array<int, 2>> adj[N];
bool choose[N];

array<long long, 2> Dfs(int u, int p, long long r) {
    array<long long, 2> res = {-INF, -INF};
    vector<long long> a = {0};
    for (auto [v, c] : adj[u]) {
        if (v == p) {
            continue;
        }
        auto val = Dfs(v, u, r);
        res[1] = max(res[1], val[1] - c);
        if (val[0] + c > r) {
            choose[v] = true;
            res[1] = max(res[1], r - c);
        } else {
            a.push_back(val[0] + c);
        }
    }
    for (auto d : a) {
        if (d > res[1]) {
            res[0] = max(res[0], d);
        }
    }
    return res;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> k;
    for (int i = 1; i < n; ++i) {
        int u, v, c;
        cin >> u >> v >> c;
        adj[u].push_back({v, c});
        adj[v].push_back({u, c});
    }
    long long l = 0, r = 1e15, ans = -1;
    while (l <= r) {
        long long mid = (l + r) >> 1;
        fill(choose + 1, choose + 1 + n, false);
        if (Dfs(1, -1, mid)[0] >= 0) {
            choose[1] = true;
        }
        int cnt = accumulate(choose + 1, choose + 1 + n, 0);
        if (cnt <= k) {
            ans = mid;
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    cout << ans << '\n';
    fill(choose + 1, choose + 1 + n, false);
    if (Dfs(1, -1, ans)[0] >= 0) {
        choose[1] = true;
    }
    int cnt = accumulate(choose + 1, choose + 1 + n, 0);
    for (int i = 1; i <= n; ++i) {
        if (!choose[i] && cnt < k) {
            ++cnt;
            choose[i] = true;
        }
    }
    for (int i = 1; i <= n; ++i) {
        if (choose[i]) {
            cout << i << ' ';
        }
    }
    cout << '\n';
    return 0;
}

Compilation message (stderr)

Main.cpp: In function 'std::array<long long int, 2> Dfs(int, int, long long int)':
Main.cpp:14:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   14 |     for (auto [v, c] : adj[u]) {
      |               ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...