#include<bits/stdc++.h>
#define pii pair <int , int>
#define fi first
#define se second
#define arr3 array <int , 3>
using namespace std;
const int maxn = 1e4 + 7;
const int INF = 1e9;
const int mod = 1e9 + 7;
int n , k , x , dp[2][maxn][maxn], sz[maxn];
vector <pii> g[maxn];
void dfs(int u , int p)
{
sz[u] = 1;
dp[0][u][1] = dp[1][u][1] = 0;
for(auto [v , w]: g[u])
{
if(v == p) continue;
dfs(v , u);
for(int a = sz[u]; a >= 1; a--)
{
for(int b = sz[v]; b >= 1; b--)
{
dp[0][u][a+b] = min(dp[0][u][a+b] , dp[0][u][a] + dp[0][v][b] + w*2);
dp[1][u][a+b] = min(dp[1][u][a+b] , dp[0][u][a] + dp[1][v][b] + w);
dp[1][u][a+b] = min(dp[1][u][a+b] , dp[1][u][a] + dp[0][v][b] + w*2);
}
}
sz[u] += sz[v];
}
}
void solve()
{
cin >> n >> k >> x;
for(int i = 1; i < n; i++)
{
int u , v , w;
cin >> u >> v >> w;
g[u].push_back({v , w});
g[v].push_back({u , w});
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++) dp[1][i][j] = dp[0][i][j] = INF;
}
dfs(x , x);
cout << dp[1][x][k] << '\n';
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
solve();
return 0;
}
# | 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... |