能给我解决问题最好,别给我甩个链接
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n, q, f[N][N], vis[N], d[N];
struct node {
int v, w;
} s[N][2];
bool is[N];
vector <node> e[N];
void dfs(int u) {
vis[u] = 1;
for (auto v : e[u]) {
if (!vis[v.v]) {
is[u] = 1;
if (s[u][0].v) s[u][1] = v;
else s[u][0] = v;
dfs(v.v);
d[u] += d[v.v] + 1;
}
}
}
void calc(int u) {
if (is[u]) {
calc(s[u][0].v), calc(s[u][1].v);
for (int i = 1; i <= min(d[u], q); i++)
f[u][i] = max({f[u][i], f[s[u][0].v][i - 1] + s[u][0].w, f[s[u][1].v][i - 1] + s[u][1].w});
for (int i = 2; i <= min(d[u], q); i++)
f[u][i] = max(f[u][i], f[s[u][0].v][i - 2] + s[u][0].w + f[s[u][1].v][i - 2] + s[u][1].w);
}
}
int main() {
scanf("%d%d", &n, &q);
for (int i = 1; i < n; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
e[u].push_back({v, w});
e[v].push_back({u, w});
}
dfs(1);
calc(1);
printf("%d", f[1][q]);
return 0;
}