Submission #341282

#TimeUsernameProblemLanguageResultExecution timeMemory
341282phathnvMuseum (CEOI17_museum)C++11
100 / 100
843 ms784884 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 10001; const int INF = 1e9; struct Tedge{ int v, w; Tedge(int _v, int _w){ v = _v; w = _w; } }; int n, k, x, dp[N][N][2], sz[N], tmpDp[N][2]; vector <Tedge> adj[N]; void minimize(int &x, const int &y){ if (x > y) x = y; } void dfs(int u, int p){ sz[u] = 1; for(int i = 1; i <= n; i++) dp[u][i][0] = dp[u][i][1] = INF; dp[u][1][0] = dp[u][1][1] = 0; for(Tedge e : adj[u]){ int v = e.v; int w = e.w; if (v == p) continue; dfs(v, u); for(int i = 1; i <= n; i++){ tmpDp[i][0] = dp[u][i][0]; tmpDp[i][1] = dp[u][i][1]; } for(int a = 1; a <= sz[u]; a++) for(int b = 1; b <= sz[v]; b++){ minimize(tmpDp[a + b][0], dp[u][a][1] + dp[v][b][0] + w); minimize(tmpDp[a + b][0], dp[u][a][0] + dp[v][b][1] + 2 * w); minimize(tmpDp[a + b][1], dp[u][a][1] + dp[v][b][1] + 2 * w); } sz[u] += sz[v]; for(int i = 1; i <= n; i++){ dp[u][i][0] = tmpDp[i][0]; dp[u][i][1] = tmpDp[i][1]; } } } void readInput(){ cin >> n >> k >> x; for(int i = 1; i < n; i++){ int u, v, w; cin >> u >> v >> w; adj[u].push_back(Tedge(v, w)); adj[v].push_back(Tedge(u, w)); } } void solve(){ dfs(x, -1); cout << dp[x][k][0]; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); readInput(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...