Submission #1276728

#TimeUsernameProblemLanguageResultExecution timeMemory
1276728herominhsteveMuseum (CEOI17_museum)C++20
100 / 100
444 ms784872 KiB
#include <bits/stdc++.h> using namespace std; #define FAST_IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<int, int> pii; #define el "\n" #define gcd __gcd #define lcm(a, b) a / gcd(a,b) * b #define get_bit(mask, i) ((mask >> i) & 1) #define set_bit(mask, i) (mask | (1<<(i))) #define low_bit(mask) (mask & (-mask)) #define pb push_back #define emp emplace #define emb emplace_back #define emf emplace_front #define mpair make_pair #define fi first #define se second #define rounds(n) setprecision(n) << fixed const int INF = 0x3f3f3f3f; const ll LLINF = (ll)1e18+3; const int MAXSIZE = (int)1e4+7; const int MOD = (int)1e9+7; const string NAME = "test"; template <class T> inline bool minimize(T &x, T y){ if (x > y){x = y; return true;} return false; } template <class T> inline bool maximize(T &x, T y){ if (x < y){x = y; return true;} return false; } int N, K, X; vector<pii> adj[MAXSIZE]; void INPUT() { cin >> N >> K >> X; for (int i = 2; i <= N; ++i){ int u, v, c; cin >> u >> v >> c; adj[u].pb({v, c}); adj[v].pb({u, c}); } } int dp[MAXSIZE][MAXSIZE][2]; int cnt[MAXSIZE]; void dfs(int u, int p) { cnt[u] = 1; dp[u][1][0] = dp[u][1][1] = 0; for (pii e : adj[u]){ int v = e.fi, c = e.se; if (v == p) continue; dfs(v, u); for (int j = min(K, cnt[u]); j >= 1; --j){ for (int k = min(K - j, cnt[v]); k >= 1; --k){ minimize(dp[u][j + k][0], dp[u][j][0] + dp[v][k][0] + 2*c); minimize(dp[u][j + k][1], dp[u][j][1] + dp[v][k][0] + 2*c); minimize(dp[u][j + k][1], dp[u][j][0] + dp[v][k][1] + c); } } cnt[u] += cnt[v]; } } void SOLVE() { for (int i = 1; i <= N; ++i){ for (int j = 1; j <= N; ++j){ dp[i][j][0] = dp[i][j][1] = INF; } } dfs(X, -1); cout << min(dp[X][K][0], dp[X][K][1]); } int main(){ FAST_IO; INPUT(); SOLVE(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...