Submission #1209280

#TimeUsernameProblemLanguageResultExecution timeMemory
1209280vijay30046Museum (CEOI17_museum)C++17
100 / 100
360 ms310408 KiB
#include <bits/stdc++.h> using namespace std; #define int long long using ll = long long; using vi = vector<int>; #define all(x) x.begin(), x.end() #define pb push_back #define pii pair<int,int> #define vii vector<pair<int,int>> #define MOD 1000000007 // #define INF 1e9 #define FOR(i,a,b) for(int i=(a); i<(b); i++) #define trav(a,x) for (auto& a: x) #pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2,fma") #pragma GCC optimization ("O2") #pragma GCC optimization ("unroll-loops") void start() { ios_base::sync_with_stdio(0); cin.tie(0); } const int N = 10001; const int INF = 1e15; vector<pair<int, int>> g[N]; vector<int> dp[N][2]; int n, k, x; void process(int node, int par) { dp[node][0] = {INF, 0}; dp[node][1] = {INF, 0}; for (pair<int, int> edge : g[node]) { int child = edge.first; int len = edge.second; if (child == par)continue; process(child, node); int a = (int)dp[node][0].size(); int b = (int)dp[child][0].size(); vector<int> combined(a + b - 1, INF); for (int i = 1; i < a; i++) { combined[i] = dp[node][1][i]; } for (int i = 1; i < a; i++) { for (int j = 1; j < b; j++) { combined[i + j] = min(combined[i + j], dp[node][1][i] + dp[child][0][j] + 2 * len); combined[i + j] = min(combined[i + j], dp[node][0][i] + dp[child][1][j] + len); } } dp[node][1] = combined; combined.assign(a + b - 1, INF); for (int i = 1; i < a; i++) { combined[i] = dp[node][0][i]; } for (int i = 1; i < a; i++) { for (int j = 1; j < b; j++) { combined[i + j] = min(combined[i + j], dp[node][0][i] + dp[child][0][j] + 2 * len); } } dp[node][0] = combined; } } void solve() { cin >> n >> k >> x; for (int i = 1; i < n; i++) { int a, b, c; cin >> a >> b >> c; g[a].pb({b, c}); g[b].pb({a, c}); } process(x, 0); int ans = dp[x][1][k]; cout << ans << "\n"; } int32_t main() { start(); int test = 1; //cin >> test; for (int i = 1; i <= test; i++) { //cout << "Case #" << i << ": "; solve(); } 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...