Submission #864016

#TimeUsernameProblemLanguageResultExecution timeMemory
864016sheldonMuseum (CEOI17_museum)C++14
100 / 100
387 ms784800 KiB
#include <bits/stdc++.h>

using namespace std;

const int nax = 1e4 + 5;
int dp[nax][nax][2], sz[nax];
vector<pair<int, int>> edges[nax];

void dfs (int u, int p) {
    sz[u] = 1;
    for (pair<int, int> pp : edges[u]) {
        int v = pp.first, c = pp.second;
        if (v != p) {
            dfs (v, u);
            for (int i = sz[u]; i >= 1; --i) {
                for (int j = 1; j <= sz[v]; ++j) {
                    dp[u][i + j][1] = min(dp[u][i + j][1], dp[u][i][0] + dp[v][j][1] + c);
                    dp[u][i + j][1] = min(dp[u][i + j][1], dp[u][i][1] + dp[v][j][0] + c * 2);
                    dp[u][i + j][0] = min(dp[u][i + j][0], dp[u][i][0] + dp[v][j][0] + c * 2);
                }
            }
            sz[u] += sz[v];
        }
    }
}

void solve() {
    int n, k, x;
    cin >> n >> k >> x;
    for (int i = 0; i < n - 1; ++i) {
        int u, v, c;
        cin >> u >> v >> c;
        edges[u].push_back({v, c});
        edges[v].push_back({u, c});
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = 2; j <= n; ++j) {
            dp[i][j][0] = dp[i][j][1] = 1e9;
        }
    }
    dfs (x, 0);
    cout << dp[x][k][1];
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    solve();
}
 
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...