#include #include #include using namespace std; using pii = pair; using Graph = vector>; int leaf[110], edge[110]; Graph G(110); void dfs(int cur, int par) { if (int(G[cur].size())==1&&cur!=1) leaf[cur]=1; for (auto [dst, w]: G[cur]) { if (dst == par) continue; edge[dst]=w; dfs(dst, cur); leaf[cur]+=leaf[dst]; } } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N, K; cin>>N>>K; for (int i=0;i>A>>B>>C; G[A].push_back({B, C}); G[B].push_back({A, C}); } dfs(1, -1); int base = 0; for (int i=2;i<=N;i++) base += leaf[i]*edge[i]; vector DP(K+1, 0); for (int i=2;i<=N;i++){ for (int j=K;j>=edge[i];j--) DP[j] = max(DP[j], DP[j-edge[i]]+leaf[i]*edge[i]); } cout << base+DP[K] << "\n"; return 0; }