#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |