Submission #1298830

#TimeUsernameProblemLanguageResultExecution timeMemory
1298830aarb_.tomatexdMuseum (CEOI17_museum)C++20
100 / 100
637 ms784612 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back using ll = long long; const int maxn = 1e4+2; const int inf = 1e9; int n,k, s, st[maxn]; vector<pair<int,int>>adj[maxn]; int dp[maxn][maxn][2]; int fs(int s, int p){ st[s] = 1; for(auto[u,w]: adj[s]) if(u!=p) st[s]+=fs(u,s); return st[s]; } void dfs(int s, int p){ for(int xd = 1; auto [u,w]: adj[s]){ if(u==p) continue; dfs(u,s); xd += st[u]; for(int i=xd; i>=2; i--){ for(int j = max(0,i-xd+st[u]); j <= min(i,st[u]); j++){ dp[s][i][0] = min(dp[s][i][0], dp[s][i-j][0] + dp[u][j][1]+2*w); dp[s][i][0] = min(dp[s][i][0], dp[s][i-j][1] + dp[u][j][0]+w); dp[s][i][1] = min(dp[s][i][1], dp[s][i-j][1] + dp[u][j][1]+2*w); } } } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k >> s; for(int i=1;i<n;i++){ int a,b,c; cin >> a >> b >> c; adj[a].pb({b,c}); adj[b].pb({a,c}); } for(int i=1;i<=n;i++){ for(int j=2;j<=n;j++){ dp[i][j][0] = dp[i][j][1] = inf; } } fs(s,-1); dfs(s,-1); cout<<dp[s][k][0]<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...