CF 633 F. The Chocolate Spree 树形dp
题目链接
题解
维护子数答案 子数直径 子数最远点 单子数最长直径  (最长的 最远点+一条链)
讨论转移
代码
#include<vector>
#include<cstdio>
#include<algorithm>
#define gc getchar()
#define pc putchar
#define int long long
inline int read() {
	int x = 0,f = 1;
	char c = gc;
	while(c < '0' || c > '9') c = gc;
	while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = gc;
	return x * f;
}
void print(int x) {
	if(x >= 10) print(x / 10);
	pc(x % 10 + '0');
}
const int maxn = 100007;
int val[maxn];
struct node {
	int v,next;
} edge[maxn << 1];
int num = 0,head[maxn];
inline void add_edge(int u,int v) {
	edge[++ num].v = v; edge[num].next = head[u];head[u] = num;
}
int n;
int f[maxn][2]; //0 : 两链之和最大 1 : 直径
int g[maxn]; //表示以u为根的子树中从u到叶子节点加上另外一条链的最长长度
int h[maxn]; //子数的f[ ][1]的最大值
int far[maxn]; //最远的叶子节点
void dfs(int x,int fa) {
	far[x] = g[x] = f[x][1] = f[x][0] = val[x];
	h[x] = 0;
	for(int i = head[x];i;i = edge[i].next) {
		int v = edge[i].v;
		if(edge[i].v == fa) continue;
		dfs(v,x);
		f[x][0] = std::max(f[x][0],f[v][0]);
		f[x][0] = std::max(f[x][0],f[v][1] + f[x][1]);
		f[x][0] = std::max(f[x][0],far[x] + g[v]);
		f[x][0] = std::max(f[x][0],far[v] + g[x]); 
		f[x][1] = std::max(f[x][1],f[v][1]);
		f[x][1] = std::max(f[x][1],far[x] + far[v]); 
		g[x] = std::max(g[x],val[x] + g[v]);
		g[x] = std::max(g[x],far[v] +val[x] + h[x]);
		g[x] = std::max(g[x],far[x] + f[v][1]); 
		h[x] = std::max(h[x],f[v][1]); 
		far[x] = std::max(far[x],far[v] + val[x]);
	}
}
main() {
	n = read();
	for(int i = 1;i <= n;++ i) val[i] = read();
	for(int i = 1;i < n;++ i) {
		int u = read(), v = read();
		add_edge(u,v);
		add_edge(v,u);
	}
	dfs(1,0);
	print(f[1][0]);
	return 0;
}
CF 633 F. The Chocolate Spree 树形dp的更多相关文章
- Codeforces 633F The Chocolate Spree 树形dp
		The Chocolate Spree 对拍拍了半天才知道哪里写错了.. dp[ i ][ j ][ k ]表示在 i 这棵子树中有 j 条链, 是否有链延伸上来. #include<bits/ ... 
- cf633F. The Chocolate Spree(树形dp)
		题意 题目链接 \(n\)个节点的树,点有点权,找出互不相交的两条链,使得权值和最大 Sol 这辈子也不会写树形dp的 也就是有几种情况,可以讨论一下.. 下文的"最大值"指的是& ... 
- CF 219D  Choosing Capital for Treeland  树形DP 好题
		一个国家,有n座城市,编号为1~n,有n-1条有向边 如果不考虑边的有向性,这n个城市刚好构成一棵树 现在国王要在这n个城市中选择一个作为首都 要求:从首都可以到达这个国家的任何一个城市(边是有向的) ... 
- CF 219D 树形DP
		CF 219D [题目链接]CF 219D [题目类型]树形DP &题意: 给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v>,如果v要到 ... 
- 牛客暑期第六场G /// 树形DP 最大流最小割定理
		题目大意: 输入t,t个测试用例 每个测试用例输入n 接下来n行 输入u,v,w,树的无向边u点到v点权重为w 求任意两点间的最大流的总和 1.最大流最小割定理 即最大流等于最小割 2.无向树上的任意 ... 
- 洛谷 P2607 [ZJOI2008]骑士 树形DP
		题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各 界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里, ... 
- 「算法笔记」树形 DP
		一.树形 DP 基础 又是一篇鸽了好久的文章--以下面这道题为例,介绍一下树形 DP 的一般过程. POJ 2342 Anniversary party 题目大意:有一家公司要举行一个聚会,一共有 \ ... 
- codeforces 633F The Chocolate Spree (树形dp)
		题目链接:http://codeforces.com/problemset/problem/633/F 题解:看起来很像是树形dp其实就是单纯的树上递归,就是挺难想到的. 显然要求最优解肯定是取最大的 ... 
- CF F - Tree with Maximum Cost (树形DP)给出你一颗带点权的树,dist(i, j)的值为节点i到j的距离乘上节点j的权值,让你任意找一个节点v,使得dist(v, i) (1 < i < n)的和最大。输出最大的值。
		题目意思: 给出你一颗带点权的树,dist(i, j)的值为节点i到j的距离乘上节点j的权值,让你任意找一个节点v,使得dist(v, i) (1 < i < n)的和最大.输出最大的值. ... 
随机推荐
- 利用capability特征加强Linux系统安全【转】
			转自:https://blog.csdn.net/fivedragon/article/details/676849 1.简介 UNIX是一种安全操作系统,它给普通用户尽可能低的权限,而把全部的系统权 ... 
- dubbo系列二、dubbo+zookeeper+dubboadmin分布式服务框架搭建(windows平台)
			一.zookeeper配置中心安装 1.下载安装包,zookeeper-3.4.6.tar.gz 2.解压安装包,修改配置文件 参考zookeeper-3.4.6/conf/zoo_sample.cf ... 
- 【转】Source Insight中文注释为乱码的解决办法
			我网上查了一堆解决办法,但是都是2017年以前的,并且都是针对于source insight 3.5及以下版本的解决方案,软件版本都到4.0了,应该有新方法出现. 干货:Source Insight ... 
- Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试
			由于最近需要使用OpenCV,本人需要在自己的PC上使用OpenCV,因此最近一直在研究如何使用Visual Studio编译OpenCV源代码并搭建开发环境,折腾了很长时间,查阅了很多相关资料,终于 ... 
- 前端工程化-webpack-cli(官方开发中。。。)
- [转]centos7 下安装MongoDB
			查看MongoDB的最新版官方下载地址: https://www.mongodb.com/download-center#community 使用wget命令下载安装包 wget https://fa ... 
- Jquery----属性的利用
			属性操作: 1.属性 属性(如果你的选择器选出了多个对象,那么默认只会返回出第一个属性). attr(属性名|属性值) - 一个参数是获取属性的值,两个参数是设置属性值 - 点击加载图片示例 remo ... 
- idea 快键键
			debug快键键 F9 resume programe 恢复程序 Alt+F10 show execution point 显示执行断点 F8 Step Over 相当于eclipse的f6 跳到下一 ... 
- xxx is not in sudoers file 解决(转)
			解决方案:首需要切换到root身份$su -(注意有- ,这和su是不同的,在用命令"su"的时候只是切换到root,但没有把root的环境变量传过去,还是当前用户的环境变量,用& ... 
- 《转》CXF WebService 开发文档-目录索引
			CXF WebService 开发文档-目录索引 上次介绍了Axis的WebService,现在我们来看看CXF是怎么完成WebService的. Axis1 WebService 在线博文: htt ... 
