Submission #1326686

#TimeUsernameProblemLanguageResultExecution timeMemory
1326686hanguyendanghuyMuseum (CEOI17_museum)C++20
100 / 100
226 ms140692 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll int
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(),x.end()
const ll MAXN=5e5+5,MOD=1e9+7,INF=1e9,LG=16;
ll i,n,m,j,k,p,dem,t,ans,sz[MAXN],st;
vector<ll> dp[2][10005];
vector<pair<ll,ll>> adj[10005];
void dfs(ll u,ll pre){
    sz[u]=1;
    for(auto x:adj[u]){
        if(x.fi==pre) continue;
        dfs(x.fi,u);
        sz[u]+=sz[x.fi];
    }
}
void solve(ll u,ll pre){
    ll cur=0;
    for(auto x:adj[u]){
        if(x.fi==pre) continue;
        solve(x.fi,u);
        for(j=cur;j>=0;j--){
            for(i=0;i<sz[x.fi];i++){
                dp[0][u][j+i+1]=min(dp[0][u][j+i+1],dp[0][u][j]+dp[0][x.fi][i]+x.se*2);
                dp[1][u][j+i+1]=min(dp[1][u][j+i+1],min(dp[0][u][j]+dp[1][x.fi][i]+x.se,dp[1][u][j]+dp[0][x.fi][i]+x.se*2));
            }
        }
        cur+=sz[x.fi];
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    // freopen("BIRD.inp","r",stdin);
    // freopen("BIRD.out","w",stdout);
    cin>>n>>m>>st;
    for(i=1;i<n;i++){
        ll u,v,c;
        cin>>u>>v>>c;
        adj[u].pb({v,c});
        adj[v].pb({u,c});
    }
    dfs(st,st);
    for(i=1;i<=n;i++){
        dp[0][i].assign(sz[i]+3,INF);
        dp[1][i].assign(sz[i]+3,INF);
        dp[0][i][0]=dp[1][i][0]=0;
    }
    solve(st,st);
    cout<<dp[1][st][m-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...