loj10153二叉苹果树
有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点。这棵树共 N 个节点,标号 1 至 N,树根编号一定为 1。
我们用一根树枝两端连接的节点编号描述一根树枝的位置。一棵有四根树枝的苹果树,因为树枝太多了,需要剪枝。但是一些树枝上长有苹果,给定需要保留的树枝数量,求最多能留住多少苹果。

输入格式
第一行两个数 N 和 Q ,N 表示树的节点数,Q 表示要保留的树枝数量。
接下来 N−1 行描述树枝信息,每行三个整数,前两个是它连接的节点的编号,第三个数是这根树枝上苹果数量。
输出格式
输出仅一行,表示最多能留住的苹果的数量。
样例
样例输入
5 2
1 3 1
1 4 10
2 3 20
3 5 20
样例输出
21
数据范围与提示
对于 100% 的数据,1≤Q≤N≤100,N≠1,每根树枝上苹果不超过 30000 个。
————————————————————————————————————————————————————
树形动归,
开始写的是首先把树变成二叉树,然后动归,记过严重超时,69分,直接在树上进行动归,就可以了,而且时间快很多!!
————————————————————————————————————————————————————
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=105;
4 struct edge
5 {
6 int u,v,w,nxt;
7 }e[maxn<<1];
8 int head[maxn],js;
9 int n,m;
10 int f[maxn][maxn];
11 struct node
12 {
13 int w,lc,rc;
14 }tree[maxn];
15 int lc[maxn],rc[maxn],ww[maxn];
16 inline void addage(int u,int v,int w)
17 {
18 e[++js].u=u;e[js].v=v;e[js].w=w;
19 e[js].nxt=head[u];head[u]=js;
20 }
21 int dfs(int u,int fa,int s)
22 {
23 if(s==1)return f[u][s]=ww[u];
24 if(s==0)return 0;
25 if(f[u][s]>0)return f[u][s];
26 for(int i=head[u];i;i=e[i].nxt)
27 {
28 int v=e[i].v;
29
30 if(v!=fa)
31 {
32 ww[v]=e[i].w;
33 if(lc[u]==0)lc[u]=v;
34 else rc[u]=v;
35 for(int j=0;j<s;++j)
36 {
37 dfs(v,u,j);
38 }
39 }
40 }
41 for(int i=0;i<s;++i)
42 f[u][s]=max(f[u][s],f[lc[u]][i]+f[rc[u]][s-i-1]+ww[u]);
43 return f[u][s];
44 }
45 void readint(int &x)
46 {
47 x=0;
48 char c=getchar();
49 for(;c>'9'||c<'0';c=getchar());
50 for(;c>='0' && c<='9';c=getchar())x=x*10+c-'0';
51 }
52 int main()
53 {
54 readint(n);readint(m);
55 for(int u,v,w,i=1;i<n;++i)
56 {
57 readint(u);readint(v);readint(w);
58 addage(u,v,w);
59 addage(v,u,w);
60 }
61 dfs(1,0,m+1);
62 cout<<f[1][m+1];
63 return 0;
64 }
loj10153二叉苹果树的更多相关文章
- Loj10153 二叉苹果树
题目描述 有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点.这棵树共 NN 个节点,标号 11 至 NN,树根编号一定为 11. 我们用一根树枝两端连接的节点编号描述一根树枝的 ...
- CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划)
CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划) Description 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的 ...
- Luogu_2015 二叉苹果树
题目链接 SB 裸题……就是想随便挂在这里……同样的题还有 Luogu_2014 选课. Luogu_2015 二叉苹果树 #include <queue> #include <cs ...
- 二叉苹果树|codevs5565|luoguP2015|树形DP|Elena
二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的 ...
- P2015 二叉苹果树
P2015 二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接 ...
- 洛谷 P2015 二叉苹果树 (树上背包)
洛谷 P2015 二叉苹果树 (树上背包) 一道树形DP,本来因为是二叉,其实不需要用树上背包来干(其实即使是多叉也可以多叉转二叉),但是最近都刷树上背包的题,所以用了树上背包. 首先,定义状态\(d ...
- 洛谷p2015二叉苹果树&yzoj1856多叉苹果树题解
二叉 多叉 有一棵苹果树,如果树枝有分叉,可以是分多叉,分叉数k>=0(就是说儿子的结点数大于等于0)这棵树共有N个结点(叶子点或者树枝分叉点),编号为1~N,树根编号一定是1.我们用一根树枝两 ...
- P2015 二叉苹果树,树形dp
P2015 二叉苹果树 题目大意:有一棵二叉树性质的苹果树,每一根树枝上都有着一些苹果,现在要去掉一些树枝,只留下q根树枝,要求保留最多的苹果数(去掉树枝后不一定是二叉树) 思路:一开始就很直接的想到 ...
- [Luogu2015]二叉苹果树(树形dp)
[Luogu2015] 二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. ...
随机推荐
- Java学习日报7.25
package shui; public class Shui { public static void main(String[] args) { // TODO 自动生成的方法存根 int g,s ...
- Docker本地镜像仓库搭建Nginx+BusyBox为例
下载Busybox.Nginx镜像 docker pull busybox docker pull nginx 基于Busybox镜像创建容器,并在容器中做部分变更操作,生成新镜像 添加一些内容 正在 ...
- centosl7简洁版配置
生产环境安装了精简版的centos7需要进行相关配置,添加相关组件才能更好的使用! 由于不同的安装方式欠缺的组件不尽相同,本例尽可能满足一般的生产环境的需要!!! 一.安装ifconfig服务 在没有 ...
- Linux 时间同步 03 ntpdate时间同步
Linux 时间同步 03 ntpdate时间同步 目录 Linux 时间同步 03 ntpdate时间同步 安装ntpdate 修改/etc/sysconfig/ntpdate 使用ntpdate手 ...
- Head First 设计模式 —— 07. 适配器模式
思考题 你能想到真实世界中,还有哪些适配器的例子? P236 HDMI 转 VGA 转换器 Type-C 转 3.5mm 线 适配器模式解析 客户使用适配器的过程: P241 客户通过目标接口调用适配 ...
- 第6章 未来的函数:生成器和promise
目录 1. 生成器函数 1.1 定义生成器函数 1.2 迭代器对象 1.3 对迭代器进行迭代 1.4 把执行权交给下一个生成器 2. 使用生成器 2.1 用生成器生成ID 2.2 用迭代器遍历DOM树 ...
- python的默认参数的一个坑
前言 pass 正文 在 https://docs.python.org/3/tutorial/controlflow.html#default-argument-values 中,有这样一段话 Im ...
- 【Java基础】面向对象中
面向对象中 这一章主要涉及面向对象的三大特征,包括封装.继承.多态.(抽象). 封装 程序设计追求"高内聚,低耦合": 高内聚 :类的内部数据操作细节自己完成,不允许外部干涉: 低 ...
- 【JavaWeb】现代 JavaScript 教程
js_model_tutorial !!待更新 前言 现代 JavaScript 教程的学习笔记,它是一份不错的学习资源,感谢开源. 中文链接 基础 函数 代码示例 函数的声明方式 function ...
- Electron小白入门自学笔记(一)
码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14297176.html 一.从Hello Electron开始 创建一个空的文件夹, ...