제출 #1303640

#제출 시각아이디문제언어결과실행 시간메모리
1303640PakinDioxideMuseum (CEOI17_museum)C++17
#4-24 실행 중
583 ms784636 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int mxN = 1e4+5; const int INF = 1e9; int sz[mxN]; vector <pair <int, int>> adj[mxN]; int dp[mxN][2][mxN]; void dfs(int u, int p) { sz[u] = 1; for (auto [v, w] : adj[u]) if (v != p) { dfs(v, u); for (int i = sz[u]; i >= 0; i--) for (int j = sz[v]; j >= 0; j--) { dp[u][1][i+j] = min({dp[u][1][i+j], dp[u][1][i] + dp[v][0][j] + 2*w, dp[u][0][i] + dp[v][1][j] + w}); dp[u][0][i+j] = min(dp[u][0][i+j], dp[u][0][i] + dp[v][0][j] + 2*w); } sz[u] += sz[v]; } } int main() { ios::sync_with_stdio(0), cin.tie(0); int n, k, x; cin >> n >> k >> x; for (int i = 1; i < n; i++) { int u, v; int w; cin >> u >> v >> w; adj[u].emplace_back(v, w); adj[v].emplace_back(u, w); } for (int i = 1; i <= n; i++) for (int j = 2; j <= n; j++) dp[i][0][j] = dp[i][1][j] = INF; dfs(x, x); cout << dp[x][1][k] << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...