Acwing传送门 : Luogu传送门 :
思路这题看完,感觉和上一篇的有依赖的背包问题
差不多
只不过这题是边权,那题是点权,但是又因为是树,每一个节点
的父节点有且只有一个,所以边权可以当作点权
因此思路还是差不多 :
状态表示 : f [ u ] [ k ] f[u][k] f[u][k] 表示以 u u u为根节点,选取 k k k条边的最大价值
状态计算 : f [ u ] [ k ] = m a x ( f [ u ] [ k ] , f [ u ] [ j − k − 1 ] + f [ s o n ] [ k ] + w [ i ] ) f[u][k] = max(f[u][k],f[u][j-k-1]+f[son][k]+w[i]) f[u][k]=max(f[u][k],f[u][j−k−1]+f[son][k]+w[i])
为什么是 k − 1 k-1 k−1? 因为根节点必须选,但是根节点没有父节点,也就是少一条边,所以我们需要 − 1 -1 −1
CODEint f[N][N];
void dfs(int u,int fa)
{
for(auto i : g[u])
{
if(i.to == fa)
continue;
dfs(i.to,u);
//计算到底部,再使用状态计算
for(int j = m;j>=0;j--)
{
for(int k = 0 ;k>n>>m;
for(int i=1;i>a>>b>>c;
g[a].push_back({b,c});
g[b].push_back({a,c});
}
dfs(1,-1);
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?