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...