Submission #1288465

#TimeUsernameProblemLanguageResultExecution timeMemory
1288465_callmelucianMuseum (CEOI17_museum)C++17
100 / 100
200 ms220968 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using pl = pair<ll,ll>; using pii = pair<int,int>; using tpl = tuple<int,int,int>; #define all(a) a.begin(), a.end() #define filter(a) a.erase(unique(all(a)), a.end()) const int mn = 1e4 + 1; int dp[2][mn][mn], knap[2][mn], sz[mn], n, k, x; vector<pii> adj[mn]; void dfs (int u, int p) { sz[u] = 1; for (auto [v, w] : adj[u]) if (v != p) dfs(v, u), sz[u] += sz[v]; knap[0][0] = knap[1][0] = 0; for (int i = 1; i <= sz[u]; i++) knap[0][i] = knap[1][i] = INT_MAX; int knapSize = 0; for (auto [v, w] : adj[u]) { if (v == p) continue; for (int preTake = knapSize; preTake >= 0; preTake--) { for (int curTake = 1; curTake <= sz[v]; curTake++) { int sum = preTake + curTake; knap[0][sum] = min(knap[0][sum], knap[0][preTake] + dp[0][v][curTake] + 2 * w); knap[1][sum] = min(knap[1][sum], knap[0][preTake] + dp[1][v][curTake] + w); knap[1][sum] = min(knap[1][sum], knap[1][preTake] + dp[0][v][curTake] + 2 * w); } } knapSize += sz[v]; } for (int i = 0; i < sz[u]; i++) dp[0][u][i + 1] = knap[0][i], dp[1][u][i + 1] = knap[1][i]; // cout << "dp " << u << " with size " << sz[u] << ":" << endl; // for (int i = 1; i <= sz[u]; i++) cout << "size " << i << ": " << dp[0][u][i] << " " << dp[1][u][i] << endl; } 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 a, b, c; cin >> a >> b >> c; adj[a].emplace_back(b, c); adj[b].emplace_back(a, c); } dfs(x, -1); cout << dp[1][x][k] << "\n"; 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...