#include <bits/stdc++.h>
using namespace std;
#define pb push_back
using ll = long long;
const int maxn = 1e4+2;
const int inf = 1e9;
int n,k, s, st[maxn];
vector<pair<int,int>>adj[maxn];
int dp[maxn][maxn][2];
int fs(int s, int p){
st[s] = 1;
for(auto[u,w]: adj[s]) if(u!=p) st[s]+=fs(u,s);
return st[s];
}
void dfs(int s, int p){
for(int xd = 1; auto [u,w]: adj[s]){
if(u==p) continue;
dfs(u,s); xd += st[u];
for(int i=xd; i>=2; i--){
for(int j = max(0,i-xd+st[u]); j <= min(i,st[u]); j++){
dp[s][i][0] = min(dp[s][i][0], dp[s][i-j][0] + dp[u][j][1]+2*w);
dp[s][i][0] = min(dp[s][i][0], dp[s][i-j][1] + dp[u][j][0]+w);
dp[s][i][1] = min(dp[s][i][1], dp[s][i-j][1] + dp[u][j][1]+2*w);
}
}
}
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> k >> s;
for(int i=1;i<n;i++){
int a,b,c; cin >> a >> b >> c;
adj[a].pb({b,c}); adj[b].pb({a,c});
}
for(int i=1;i<=n;i++){
for(int j=2;j<=n;j++){
dp[i][j][0] = dp[i][j][1] = inf;
}
}
fs(s,-1);
dfs(s,-1);
cout<<dp[s][k][0]<<'\n';
}
| # | 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... |