#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] , f[2][maxn][maxn] , sz[maxn];
vector <pii> g[maxn];
void dfs(int u , int p)
{
sz[u] = 1;
for(auto [v , w]: g[u])
{
if(v != p) dfs(v , u);
}
int id = 0;
f[0][0][0] = f[1][0][0] = f[0][0][1] = f[1][0][1] = 0;
for(auto [v , w]: g[u])
{
if(v == p) continue;
id++;
for(int i = sz[u]+1; i <= sz[u] + sz[v]; i++) f[0][id][i] = f[1][id][i] = INF;
for(int i = 0; i <= sz[u]; i++)
{
f[0][id][i] = f[0][id-1][i];
f[1][id][i] = f[1][id-1][i];
}
f[0][id][0] = f[1][id][0] = 0;
for(int a = 1; a <= sz[u]; a++)
{
for(int b = 0; b <= sz[v]; b++)
{
f[0][id][a+b] = min(f[0][id][a+b] , f[0][id-1][a] + dp[0][v][b] + w*2);
f[1][id][a+b] = min(f[1][id][a+b] , f[0][id-1][a] + dp[1][v][b] + w);
f[1][id][a+b] = min(f[1][id][a+b] , f[1][id-1][a] + dp[0][v][b] + w*2);
}
}
sz[u] += sz[v];
}
for(int i = 0; i <= sz[u]; i++)
{
dp[0][u][i] = f[0][id][i];
dp[1][u][i] = f[1][id][i];
}
}
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});
}
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... |