제출 #926599

#제출 시각아이디문제언어결과실행 시간메모리
926599WarinchaiMuseum (CEOI17_museum)C++14
100 / 100
426 ms784976 KiB
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>>adj[10005];
int n,k,x;
int inf=1e9;
int dp[2][10005][10005];
int sz[10005];
void dfs(int u,int p=-1){
    //cerr<<u<<"\n";
    sz[u]=1;
    for(auto x:adj[u])if(x.second!=p){
        dfs(x.second,u);
        for(int i=sz[u];i>=0;i--){
            for(int j=sz[x.second];j>=0;j--){
                dp[0][u][i+j]=min(dp[0][u][i+j],dp[0][u][i]+dp[0][x.second][j]+x.first*2);
                dp[1][u][i+j]=min({dp[1][u][i+j],dp[0][u][i]+dp[1][x.second][j]+x.first,dp[1][u][i]+dp[0][x.second][j]+x.first*2});
            }
        }
        sz[u]+=sz[x.second];
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>k>>x;
    for(int i=1;i<=n-1;i++){
        int a,b,c;
        cin>>a>>b>>c;
        adj[a].push_back({c,b});
        adj[b].push_back({c,a});
    }
    for(int i=0;i<=n;i++){
        for(int j=2;j<=k;j++){
            dp[0][i][j]=dp[1][i][j]=inf;
        }
    }
    //cerr<<"work\n";
    dfs(x);
    cout<<dp[1][x][k];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...