题目链接:https://www.luogu.org/problemnew/show/P2015

题意:给定一颗结点个数为n的树,有n-1条边,每条边有个权值,树根为1。现在给出q <=n,问剪枝后保留q条边后的边的权值最大是多少。

思路:首先要知道这道题有个隐含条件,如果某条边被保留,那么从根节点到这个点路径上的所有点都必须保留。

   我们用dp[i][j]表示顶点i的子树上保留j条边的最大权值和是多少。

   给出状态转移方程:dp[x][j]=max(dp[x][j] , dp[x][j-1-k]+dp[y][k]+edge[i].w)

   其中x是当前结点,y是x的一个子结点,k表示结点y上保留的边数,0<j<=min(siz[x],q),0=<k<=min(siz[y],j-1)。因为要把x和y之间的边算上,所以是j-1-k。

   其中j需要倒序枚举,类似01背包。

AC代码:

#include<cstdio>
#include<algorithm>
using namespace std; const int maxn=; struct node{
int v,w,nex;
}edge[maxn<<]; int n,q,cnt,head[maxn],siz[maxn];
int dp[maxn][maxn]; void adde(int u,int v,int w){
edge[++cnt].v=v;
edge[cnt].w=w;
edge[cnt].nex=head[u];
head[u]=cnt;
} void dfs(int x,int f){
for(int i=head[x];i;i=edge[i].nex){
int y=edge[i].v;
if(y==f) continue;
dfs(y,x);
siz[x]+=siz[y]+;
for(int j=min(siz[x],q);j;--j)
for(int k=;k<=min(siz[y],j-);++k)
dp[x][j]=max(dp[x][j],dp[x][j--k]+dp[y][k]+edge[i].w);
}
} int main(){
scanf("%d%d",&n,&q);
for(int i=;i<n;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
adde(u,v,w);
adde(v,u,w);
}
dfs(,-);
printf("%d\n",dp[][q]);
return ;
}

luoguP2015(简单树形DP)的更多相关文章

  1. poj 2342 Anniversary party 简单树形dp

    Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3862   Accepted: 2171 ...

  2. hdu4705 Y 简单树形DP 2013多校训练第十场 J题

    题意:求一棵树中不在一条链中的三个点的对数. 转化一下,用总对数减去在一条链上的三点对数即可. 考虑经过根节点,然后可能是不同的子树中各选一个:或者是子树中选一个,然后当前节点为根的子树以外的节点选一 ...

  3. [10.27_P2] 统计损失 (简单树形DP)

    树形DP 简单题 Description 给定一棵树,每个节点有一个值.对于一条路径,它的值为路径上所有点的值的乘积.求出树上所有路径的值的和. 注意:单个点也算一条路径. Input 第 1 行一个 ...

  4. [Luogu P1122]最大子树和 (简单树形DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P1122 Solution 这是一道简单的树形DP题. 首先,我们可以转换一下题面,可以发现,题目要求我们求 ...

  5. hdu 1520Anniversary party(简单树形dp)

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. HDU 3899 简单树形DP

    题意:一棵树,给出每个点的权值和每条边的长度, 点j到点i的代价为点j的权值乘以连接i和j的边的长度.求点x使得所有点到点x的代价最小,输出 虽然还是不太懂树形DP是什么意思,先把代码贴出来把. 这道 ...

  7. hdu1520 Anniversary party 简单树形DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 思路:树形DP的入门题 定义dp[root][1]表示以root为根节点的子树,且root本身参 ...

  8. Nowcoder contest 370F Rinne Loves Edges (简单树形DP) || 【最大流】(模板)

    <题目链接> 题目大意: 一个 $n$ 个节点 $m$ 条边的无向连通图,每条边有一个边权 $w_i$.现在她想玩一个游戏:选取一个 “重要点” S,然后选择性删除一些边,使得原图中所有除 ...

  9. HDU 4705 Y (2013多校10,1010题,简单树形DP)

    Y Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submiss ...

  10. hdu 1054 Strategic Game (简单树形DP)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. JavaScript相关知识点

    ㈠JavaScript编写位置 ⑴可以将js代码编写到外部js文件中,然后通过script标签引入    写到外部文件中可以在不同的页面中同时使用,也可以利用到浏览器的缓存机制    推荐使用的方式 ...

  2. SSH整合框架

    实现登录.新闻增删改查.树形菜单 引入pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...

  3. html css回顾总结

    //html基本结构<!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  4. 2019牛客暑期多校训练营(第二场)J

    题意 给一个长度为1e9的只包含1和-1的数列,1的个数不超过1e7,计算有多少对\((l,r)\)满足\(\sum_{i=l}^r a[i]>0\) 分析 dp求出每段连续的1最右端为右端点的 ...

  5. [CSP-S模拟测试]:装饰(数学)

    题目传送门(内部题147) 输入格式 每个测试点第一行一个正整数$T$,表示该测试点内的数据组数. 接下来$T$行,每行三个非负整数$a,b,c$,含义如题目中所示. 输出格式 对每组数据输出一行一个 ...

  6. JS 浏览器地址栏传递参数,参数加密/解密(编码/解码)

    我们有时候在JS里进行页面跳转,并且传递了参数(AppName),如下: window.location = "../../views/form/edit.html?AppName=新增&q ...

  7. Linux停止被占用的端口

    查找被占用的端口:netstat -lnp|grep 80 查看80端口被那些服务占用. kill掉该进程 kill -9 5574 然后在去查看一下80被占用的情况netstat -lnp|grep ...

  8. 【译】OkHttp3 拦截器(Interceptor)

    一,OkHttp 拦截器介绍(译自官方文档) 官方文档:https://github.com/square/okhttp/wiki/Interceptors 拦截器是 OkHttp 提供的对 Http ...

  9. orale数据库的SQL查询

      创建学生表,成绩表,教师表,课程表,分别添加数据信息 create table student( sno ) primary key, sname ), sage ), ssex ) ); cre ...

  10. 20175215 2018-2019-2 第九周java课程学习总结

    第十一章 JDBC与MySQL数据库 11.1 MySQL数据库管理系统 下载安装过程略 使用的是MySQL 5.6而非5.7 11.2 启动MySQL数据库服务器 启动和root用户过程略 11.3 ...