Submission #1176820

#TimeUsernameProblemLanguageResultExecution timeMemory
1176820ezzzayMuseum (CEOI17_museum)C++20
20 / 100
470 ms164580 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define ff first #define ss second #define pb push_back const int N=35; int dst[N][N]; vector<pair<int,int>>v[N]; void dfs(int a, int p, int g){ for(auto [b,c]:v[a]){ if(b==p)continue; dst[g][b]=dst[g][a]+c; dfs(b,a,g); } } int dp[(1<<20)][20]; signed main(){ int n,k,x; cin>>n>>k>>x; x--; for(int i=0;i<n-1;i++){ int a,b,c; cin>>a>>b>>c; a--; b--; v[a].pb({b,c}); v[b].pb({a,c}); } for(int i=0;i<n;i++){ dfs(i,-1,i); } for(int i=0;i<(1<<n);i++){ for(int j=0;j<n;j++){ dp[i][j]=1e14; } } dp[(1<<x)][x]=0; int ans=1e14; for(int i=0;i<(1<<n);i++){ vector<int>A,B; int g=0; for(int j=0;j<n;j++){ if(i & (1<<j)){ A.pb(j); g++; } else{ B.pb(j); } } if(g==k){ for(auto a:A){ ans=min(ans,dp[i][a]); } } for(auto a:A){ for(auto b:B){ dp[i+(1<<b)][b]= min(dp[i+(1<<b)][b] , dp[i][a]+dst[a][b]); } } } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...