Submission #988691

#TimeUsernameProblemLanguageResultExecution timeMemory
988691LOLOLOMuseum (CEOI17_museum)C++17
100 / 100
470 ms786208 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define f first #define s second #define pb push_back #define ep emplace #define eb emplace_back #define lb lower_bound #define ub upper_bound #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define uniquev(v) sort(all(v)), (v).resize(unique(all(v)) - (v).begin()) #define mem(f,x) memset(f , x , sizeof(f)) #define sz(x) (int)(x).size() #define __lcm(a, b) (1ll * ((a) / __gcd((a), (b))) * (b)) #define mxx *max_element #define mnn *min_element #define cntbit(x) (ll)__builtin_popcountll(x) #define len(x) (int)(x.length()) const int N = 1e4 + 10; int dp[N][N][2], sz[N]; vector <pair <int, int>> ed[N]; int n, k; void minimize(int &a, int b) { if (a > b) { a = b; } } void dfs(int u, int v) { sz[u] = 1; dp[u][0][1] = dp[u][1][0] = dp[u][0][0] = dp[u][1][1] = 0; for (auto x : ed[u]) { if (x.f == v) continue; dfs(x.f, u); sz[u] += sz[x.f]; for (int a = min(k, sz[u]); a >= 2; a--) { for (int b = max(0, a - sz[u] + sz[x.f]); b <= min(sz[x.f], a); b++) { minimize(dp[u][a][0], dp[x.f][b][0] + dp[u][a - b][0] + x.s * 2); minimize(dp[u][a][1], dp[x.f][b][1] + dp[u][a - b][0] + x.s); minimize(dp[u][a][1], dp[x.f][b][0] + dp[u][a - b][1] + x.s * 2); } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); mem(dp, 0x3f); int x; cin >> n >> k >> x; for (int i = 1; i < n; i++) { int a, b, c; cin >> a >> b >> c; ed[a].pb({b, c}); ed[b].pb({a, c}); } dfs(x, x); cout << min(dp[x][k][1], dp[x][k][0]) << '\n'; return 0; } /* 11 8 3 1 3 3 3 2 5 6 4 5 1 11 3 9 1 2 9 10 2 3 7 10 6 7 1 7 8 1 7 5 1 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...