// start 5:17
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
const int N = 10005;
int sz[N];
vector<pair<int,int> > A[N];
int dp[2][N][N];
int n,k,x,a,b,c;
void dfs(int u,int par = -1) {
dp[1][u][1] = dp[0][u][1] = 0;
sz[u]=1;
for(auto [nxt,w] : A[u]) if(nxt!=par){
dfs(nxt,u);
for(int i = min(k,sz[u] + sz[nxt]);i>=2;i--) {
for(int j = min(i-1,sz[nxt]);j>=max(1,i-sz[u]);j--){
dp[1][u][i] = min({
dp[1][u][i],
dp[0][u][i-j] + dp[1][nxt][j] + w,
dp[1][u][i-j] + dp[0][nxt][j] + 2 * w
});
dp[0][u][i] = min({
dp[0][u][i],
dp[0][u][i-j] + dp[0][nxt][j] + 2 * w
});
}
}
sz[u] += sz[nxt];
}
}
int main() {
cin>>n>>k>>x;
for(int i = 0;i<n-1;i++) {
cin>>a>>b>>c;
A[a].push_back({b,c});
A[b].push_back({a,c});
}
for(int i = 0;i<N;i++) for(int j = 0;j<N;j++) dp[0][i][j] = dp[1][i][j] = 1e9;
dfs(x);
cout<<dp[1][x][k];
}
# | 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... |