Submission #202103

#TimeUsernameProblemLanguageResultExecution timeMemory
202103thebesMuseum (CEOI17_museum)C++14
100 / 100
867 ms784928 KiB
#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi;
typedef pair<int,int> pii;

#define pb push_back

const int MN = 1e4+5;
int N, K, X, i, j, x, y, w, dp[MN][MN], dp2[MN][MN], tmp[MN], tmp2[MN], sz[MN];
vector<pii> adj[MN];

void dfs(int n,int p){
    memset(dp[n],0x3f,sizeof(dp[n]));
    memset(dp2[n],0x3f,sizeof(dp2[n]));
    dp[n][0]=dp[n][1]=dp2[n][0]=dp2[n][1]=0;
    sz[n] = 1;
    for(auto v : adj[n]){
        if(v.first==p) continue;
        dfs(v.first, n);
        memset(tmp,0x3f,sizeof(tmp));
        memset(tmp2,0x3f,sizeof(tmp2));
        for(i=0;i<=sz[n];i++){
            for(j=0;j<=sz[v.first];j++){
                tmp[i+j]=min(tmp[i+j],dp[n][i]+dp[v.first][j]+2*v.second);
                tmp2[i+j]=min(tmp2[i+j],min(dp[n][i]+dp2[v.first][j]+v.second,dp2[n][i]+dp[v.first][j]+2*v.second));
            }
        }
        sz[n] += sz[v.first];
        for(i=0;i<=sz[n];i++){
            dp[n][i]=min(dp[n][i],tmp[i]);
            dp2[n][i]=min(dp2[n][i],tmp2[i]);
        }
    }
}

int main(){
    scanf("%d%d%d",&N,&K,&X);
    for(i=1;i<N;i++){
        scanf("%d%d%d",&x,&y,&w);
        adj[x].pb({y,w});
        adj[y].pb({x,w});
    }
    dfs(X,0);
    printf("%d\n",min(dp[X][K],dp2[X][K]));
    return 0;
}

Compilation message (stderr)

museum.cpp: In function 'int main()':
museum.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%d",&N,&K,&X);
     ~~~~~^~~~~~~~~~~~~~~~~~~
museum.cpp:40:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d%d",&x,&y,&w);
         ~~~~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...