Luogu_2015 二叉苹果树
题目链接
SB 裸题……就是想随便挂在这里……同样的题还有 Luogu_2014 选课。
Luogu_2015 二叉苹果树
#include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = + ;
int n, m, head[maxn], size[maxn], val[maxn], dp[maxn][maxn],ans, edge_num; struct Edge { int v, w, nxt; } edge[maxn << ]; inline int read() {
register char ch = ; register int w = , x = ;
while( !isdigit(ch) ) w |= (ch == '-'), ch = getchar();
while( isdigit(ch) ) x = (x * ) + (ch ^ ), ch = getchar();
return w ? -x : x;
} inline void Add_edge(int u, int v, int w) {
edge[++edge_num].v = v, edge[edge_num].w = w;
edge[edge_num].nxt = head[u], head[u] = edge_num;
} inline int Set_value(int x, int p) {
for(int i = head[x]; i; i = edge[i].nxt) {
if( edge[i].v == p ) continue;
size[x] = size[x] + Set_value(edge[i].v, x), val[edge[i].v] = edge[i].w;
}
return ++size[x];
} inline void Deep_fs(int x, int p) {
vector<pair<int, int> > v;
for(int i = head[x]; i; i = edge[i].nxt) {
if( edge[i].v == p ) continue;
v.clear(), Deep_fs(edge[i].v, x);
for(int j = ; j <= min(size[edge[i].v], m); ++j)
v.push_back(make_pair(j + , dp[edge[i].v][j] + val[edge[i].v]));
for(int j = m; j > ; --j)
for(int k = ; k < v.size(); ++k)
if( j >= v[k].first ) dp[x][j] = max(dp[x][j], dp[x][j - v[k].first] + v[k].second);
}
} int main(int argc, const char *argv[])
{
freopen("..\\nanjolno.in", "r", stdin);
freopen("..\\nanjolno.out", "w", stdout); scanf("%d%d", &n, &m);
for(int u, v, w, i = ; i < n; ++i)
u = read(), v = read(), w = read(), Add_edge(u, v, w), Add_edge(v, u, w);
Set_value(, ), Deep_fs(, ), printf("%d\n", dp[][m]); fclose(stdin), fclose(stdout);
return ;
}
Luogu_2014 选课
#include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = + ;
int n, m, head[maxn], val[maxn], siz[maxn], dp[maxn][maxn], edge_num; struct Edge { int v, nxt; } edge[maxn]; inline int read() {
register char ch = ; register int w = , x = ;
while( !isdigit(ch) ) w |= (ch == '-'), ch = getchar();
while( isdigit(ch) ) x = (x * ) + (ch ^ ), ch = getchar();
return w ? -x : x;
} inline void Add_edge(int u, int v) {
edge[++edge_num].v = v;
edge[edge_num].nxt = head[u], head[u] = edge_num;
} inline int Deep_fs(int x, int p) {
for(int i = head[x]; i; i = edge[i].nxt) {
if( edge[i].v == p ) continue;
siz[x] = siz[x] + Deep_fs(edge[i].v, x);
for(int j = m; j >= ; --j)
for(int k = ; k <= min(m, siz[edge[i].v]); ++k)
if( j >= k + ) dp[x][j] = max(dp[x][j], dp[x][j - k - ] + dp[edge[i].v][k] + val[edge[i].v]);
}
return ++siz[x];
} int main(int argc, const char *argv[])
{
freopen("..\\nanjolno.in", "r", stdin);
freopen("..\\nanjolno.out", "w", stdout); scanf("%d%d", &n, &m);
for(int v, i = ; i <= n; ++i) v = read(), val[i] = read(), Add_edge(v, i);
Deep_fs(, -), printf("%d\n", dp[][m]); fclose(stdin), fclose(stdout);
return ;
}
—— 假如我今生无份遇到你,就让我永远感到恨不相逢 —— 让我念念不忘,让我在醒时梦中都怀带着这悲哀的苦痛。
Luogu_2015 二叉苹果树的更多相关文章
- CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划)
		CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划) Description 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的 ... 
- 二叉苹果树|codevs5565|luoguP2015|树形DP|Elena
		二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的 ... 
- P2015 二叉苹果树
		P2015 二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接 ... 
- Loj10153 二叉苹果树
		题目描述 有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点.这棵树共 NN 个节点,标号 11 至 NN,树根编号一定为 11. 我们用一根树枝两端连接的节点编号描述一根树枝的 ... 
- 洛谷 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. ... 
- loj10153二叉苹果树
		有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点.这棵树共 N 个节点,标号 1 至 N,树根编号一定为 1. 我们用一根树枝两端连接的节点编号描述一根树枝的位置.一棵有四根树 ... 
随机推荐
- 初级c++编码规范
			想了很久,第一篇文章还是应该写编码规范好一点.编码规范是一个仁者见仁的问题,为了避免复杂庞大,自己总结了一套简单版本的规范. 简介 本文介绍一份自己使用的C++编码规范.第一次正式进入 ... 
- MongoDB 最大连接数 设置失效的异常分析
			背景介绍: 查询MongoDB配置参数,可以知道关于最大连接数的参数是maxConns.但是连接实例后,查看支持的最大连接数,还是默认的819. 说明:最大连接数是由maxConn (maxIncom ... 
- Linux学习历程——Centos 7 tar命令
			一.命令介绍 tar命令用于对文件进行打包压缩或解压. tar常用参数 参数 作用 -c 创建压缩文件 -x 解开压缩文件 -t 查看压缩包内有哪些文件 -r 向压缩归档末尾追加文件 -u 更新压缩包 ... 
- Saltstack_使用指南02_远程执行-验证
			1. 主机规划 2. Master与哪些minion通信 2.1. Master与哪些minion正常通信 [root@salt100 ~]# salt '*' test.ping salt100: ... 
- #017 python实验课第五周
			总结写在最前面: 1.语法还是不会...(每周强制留的C语言一百题都没空写PS.团委诶....)都是现查现用(莫凡Python这个网站特别好用知识点一个视频就一分钟B站的播放器没广告,用啥学啥,还配有 ... 
- java类加载及类初始化
			1.前言 java是跨平台语言,主要是因为它的java虚拟机的存在,java有事编译语言,所以需要将编写的java文件编译成jvm可运用的class字节码文件.在java中一切皆对象.对于Java虚拟 ... 
- vue  使用localStorage解决vuex在页面刷新后数据被清除的问题
			通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ... 
- MAX
			Max的用法1(Min类似) Matlab中max函数在矩阵中求函数大小的实例如下: C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一 ... 
- 【转】SpringBoot启动服务的三种方式
			1.IDEA启动 2.命令行启动 首先将命令行位置跳转到当前项目的根目录下,再输入“mvn spring-boot:run”命令,初次操作maven需要下载插件等待几分钟 3.命令行编译为jar启动 ... 
- 爬虫之BS&Xpath
			BeautifulSoup 一 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: ''' Beautiful Soup提供一些简单的.p ... 
