제출 #161441

#제출 시각아이디문제언어결과실행 시간메모리
161441MinnakhmetovMuseum (CEOI17_museum)C++14
80 / 100
3051 ms9592 KiB
#include <bits/stdc++.h> #define ll long long #define all(aaa) aaa.begin(), aaa.end() using namespace std; struct E { int to, w; }; const int N = 1e4 + 5, K = 102, INF = 1e9; vector<E> g[N]; int dp[N][K][2]; int n, k, x; void upd(int &x, int y) { x = min(x, y); } void dfs(int node, int anc) { dp[node][1][0] = dp[node][1][1] = 0; for (E e : g[node]) { if (e.to != anc) { dfs(e.to, node); for (int x = k; x > 0; x--) { for (int y = 1; x + y <= k; y++) { upd(dp[node][x + y][0], dp[node][x][0] + dp[e.to][y][1] + e.w * 2); upd(dp[node][x + y][0], dp[node][x][1] + dp[e.to][y][0] + e.w); upd(dp[node][x + y][1], dp[node][x][1] + dp[e.to][y][1] + e.w * 2); } } } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n >> k >> x; x--; for (int i = 0; i < n - 1; i++) { int a, b, c; cin >> a >> b >> c; a--, b--; g[a].push_back({b, c}); g[b].push_back({a, c}); } for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { for (int k = 0; k < 2; k++) { dp[i][j][k] = INF; } } } dfs(x, -1); cout << dp[x][k][0]; 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...