16分求助,参考了第一篇题解
查看原帖
16分求助,参考了第一篇题解
999274
CNS_5t0_0r2楼主2023/8/11 09:43
#include<bits/stdc++.h>
using namespace std;
const int N = 109;
struct egde{
	int to,nex,cost;
} e[N << 1];
int ecnt,head[N],siz[N];
int n,q;
int dp[N][N];
void addegde(int u,int v,int w){
	ecnt++;
	e[ecnt] = (egde){v,head[u],w};
	head[u] = ecnt;
}
void dfs(int u,int fa){
	for(int i = head[u];i;i = e[i].nex){
		int v = e[i].to;
		if(v == fa)
			continue;
		dfs(v,u);
		siz[u] = siz[v] + 1;
		for(int j = min(siz[u],q);j;j--)
			for(int k = min(siz[v],j - 1);k;k--)
				dp[u][j] = max(dp[u][j],dp[u][j - k - 1] + dp[v][k] + e[i].cost);
	}
}
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);
		addegde(u,v,w);
		addegde(v,u,w);
	}
	dfs(1,0);
	printf("%d",dp[1][q]);
	return 0;
}
2023/8/11 09:43
加载中...