Submission #1290093

#TimeUsernameProblemLanguageResultExecution timeMemory
1290093SoSmolStenMuseum (CEOI17_museum)C++20
100 / 100
253 ms360008 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int N = 1e4 + 10; vector<pair<int, int>> adj[N]; int n, k, x; ll dp[2][N][N], knap[2][N]; int sz[N]; void dfs(int u, int p); int main (int argc, char const *argv[]) { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k >> x; for(int i = 1, a, b, c; i < n; ++i) { cin >> a >> b >> c; adj[a].emplace_back(b, c); adj[b].emplace_back(a, c); } dfs(x, 0); cout << dp[1][x][k]; return 0; } void dfs(int u, int p){ sz[u] = 1; for(auto [v, w] : adj[u]) { if(v == p) continue; dfs(v, u); sz[u] += sz[v]; } for(int i = 0; i <= sz[u]; ++i) knap[0][i] = knap[1][i] = 1e18; knap[0][0] = knap[1][0] = 0; int knapSize = 0; for(auto [v, w] : adj[u]) { if(v == p) continue; for(int i = knapSize; i >= 0; --i) { for(int j = 1; j <= sz[v]; ++j) { knap[0][i + j] = min(knap[0][i + j], knap[0][i] + dp[0][v][j] + w*2); knap[1][i + j] = min(knap[1][i + j], knap[0][i] + dp[1][v][j] + w); knap[1][i + j] = min(knap[1][i + j], knap[1][i] + dp[0][v][j] + w*2); } } knapSize += sz[v]; } for (int i = 0; i < sz[u]; ++i) { dp[0][u][i+1] = knap[0][i]; dp[1][u][i+1] = knap[1][i]; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...