Submission #1154803

#TimeUsernameProblemLanguageResultExecution timeMemory
1154803AndrijaMArcade (NOI20_arcade)C++20
0 / 100
515 ms1114112 KiB
#include<bits/stdc++.h> using namespace std; const int INF = 1e9, N = 1e4 + 5; int dp[N][N][2], sz[N]; vector<pair<int, int>> g[N]; int getSize(int u, int p) { sz[u] = 1; for (auto &[v, _] : g[u]) if (v != p) sz[u] += getSize(v, u); return sz[u]; } void dfs(int u, int p) { int total = 1; for (auto &[v, w] : g[u]) { if (v == p) continue; dfs(v, u); for (int i = total; i >= 0; i--) { for (int j = 0; j <= sz[v]; j++) { dp[u][i + j][0] = min({ dp[u][i + j][0], dp[u][i][1] + dp[v][j][0] + w, dp[u][i][0] + dp[v][j][1] + 2 * w }); dp[u][i + j][1] = min(dp[u][i + j][1], dp[u][i][1] + dp[v][j][1] + 2 * w); } } total += sz[v]; } } int main() { cin.tie(0)->sync_with_stdio(0); int n, k, x; cin >> n >> k >> x; fill(&dp[0][0][0], &dp[N-1][N-1][2] + 1, INF); for (int i = 1, u, v, w; i < n; i++) { cin >> u >> v >> w; g[u].emplace_back(v, w); g[v].emplace_back(u, w); } getSize(x, 0); dfs(x, 0); cout << dp[x][k][0] << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...