Submission #1155917

#TimeUsernameProblemLanguageResultExecution timeMemory
1155917VMaksimoski008Museum (CEOI17_museum)C++20
80 / 100
3097 ms216120 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 1e4 + 5; int dp[2][maxn][maxn], dep[maxn], tmp[2][maxn]; vector<pair<int, int> > G[maxn]; int n, k, r, sub[maxn]; void dfs(int u, int p) { sub[u] = 1; for(auto [v, w] : G[u]) { if(v == p) continue; dep[v] = dep[u] + w; dfs(v, u); sub[u] += sub[v]; } for(int i=0; i<=sub[u]; i++) dp[0][u][i] = dp[1][u][i] = 1e9; dp[0][u][0] = 0; dp[0][u][1] = 0; dp[1][u][1] = -dep[u]; sub[u] = 1; for(auto [v, w] : G[u]) { if(v == p) continue; for(int i=0; i<=min(k, sub[u]+sub[v]); i++) { tmp[0][i] = dp[0][u][i]; tmp[1][i] = dp[1][u][i]; } for(int i=1; i<=min(k, sub[u]+sub[v]); i++) { for(int j=1; i+j<=min(k, sub[u]+sub[v])&&j<=min(k, sub[v]); j++) { tmp[0][i+j] = min(tmp[0][i+j], dp[0][u][i] + dp[0][v][j] + 2 * w); tmp[1][i+j] = min(tmp[1][i+j], dp[1][u][i] + dp[0][v][j] + 2 * w); tmp[1][i+j] = min(tmp[1][i+j], dp[0][u][i] + dp[1][v][j] + 2 * w); } } for(int i=1; i<=min(k, sub[u]+sub[v]); i++) { dp[0][u][i] = tmp[0][i]; dp[1][u][i] = tmp[1][i]; } sub[u] += sub[v]; } } signed main() { ios_base::sync_with_stdio(false); cout.tie(0); cin.tie(0); cin >> n >> k >> r; for(int i=1; i<n; i++) { int a, b, w; cin >> a >> b >> w; G[a].push_back({ b, w }); G[b].push_back({ a, w }); } dfs(r, r); cout << dp[1][r][k] << '\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...