codeforces 633F The Chocolate Spree (树形dp)
题目链接:http://codeforces.com/problemset/problem/633/F
题解:看起来很像是树形dp其实就是单纯的树上递归,就是挺难想到的。
显然要求最优解肯定是取最大的两条链不妨设dp[i][3],dp[i][1]表示以i为根节点的子树val最大的子链,dp[i][2]表示以i为根节点的子树val最大的两条子链。
显然dp[i][2]=max(dp[i][2],dp[i][1]+dp[v][1]) (v 表示i的子节点)
dp[i][2]=max(dp[i][2],down[i]+mmp[v]) (down[i]表示的是以i为根节点到子叶val最大的,mmp[v]表示以v为根节点的到子也最大值再加上一条最大的链的值)
dp[i][2]=max(dp[i][2],down[v]+mmp[i])
其实这些都是挺形象的几种可能性画一下图就知道了。
剩下的down的转移和mmp的转移具体看一下代码。这里还会涉及到一个bs[i]表示以dp[v][1]的最大值。
然后这些东西都通过递归dfs就行了。dfs是个神奇的东西
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
const int M = 1e5 + ;
int a[M];
vector<int> vc[M];
ll dp[M][] , down[M] , mmp[M] , bs[M];
void dfs(int u , int pre) {
int len = vc[u].size();
dp[u][] = a[u];
dp[u][] = a[u];
down[u] = a[u];
bs[u] = ;
mmp[u] = a[u];
for(int i = ; i < len ; i++) {
int v = vc[u][i];
if(v == pre) continue;
dfs(v , u);
/////
dp[u][] = max(dp[u][] , dp[v][]);
dp[u][] = max(dp[u][] , dp[u][] + dp[v][]);
dp[u][] = max(dp[u][] , down[u] + mmp[v]);
dp[u][] = max(dp[u][] , down[v] + mmp[u]);
/////
dp[u][] = max(dp[u][] , dp[v][]);
dp[u][] = max(dp[u][] , down[v] + down[u]);
/////
mmp[u] = max(mmp[u] , mmp[v] + a[u]);
mmp[u] = max(mmp[u] , dp[v][] + down[u]);
mmp[u] = max(mmp[u] , down[v] + bs[u] + a[u]);
/////
bs[u] = max(bs[u] , dp[v][]);
/////
down[u] = max(down[u] , down[v] + a[u]);
}
}
int main() {
int n;
scanf("%d" , &n);
for(int i = ; i <= n ; i++) {
scanf("%d" , &a[i]);
}
for(int i = ; i < n ; i++) {
int u , v;
scanf("%d%d" , &u , &v);
vc[u].push_back(v);
vc[v].push_back(u);
}
dfs( , );
printf("%lld\n" , dp[][]);
return ;
}
codeforces 633F The Chocolate Spree (树形dp)的更多相关文章
- Codeforces 633F The Chocolate Spree 树形dp
		
The Chocolate Spree 对拍拍了半天才知道哪里写错了.. dp[ i ][ j ][ k ]表示在 i 这棵子树中有 j 条链, 是否有链延伸上来. #include<bits/ ...
 - CF 633 F. The Chocolate Spree 树形dp
		
题目链接 CF 633 F. The Chocolate Spree 题解 维护子数答案 子数直径 子数最远点 单子数最长直径 (最长的 最远点+一条链) 讨论转移 代码 #include<ve ...
 - cf633F. The Chocolate Spree(树形dp)
		
题意 题目链接 \(n\)个节点的树,点有点权,找出互不相交的两条链,使得权值和最大 Sol 这辈子也不会写树形dp的 也就是有几种情况,可以讨论一下.. 下文的"最大值"指的是& ...
 - Codeforces 633F 树的直径/树形DP
		
题意:有两个小孩玩游戏,每个小孩可以选择一个起始点,并且下一个选择的点必须和自己选择的上一个点相邻,问两个选的点权和的最大值是多少? 思路:首先这个问题可以转化为求树上两不相交路径的点权和的最大值,对 ...
 - Codeforces 633F - The Chocolate Spree(树形 dp)
		
Codeforces 题目传送门 & 洛谷题目传送门 看来我这个蒟蒻现在也只配刷刷 *2600 左右的题了/dk 这里提供一个奇奇怪怪的大常数做法. 首先还是考虑分析"两条不相交路径 ...
 - codeforces 161D Distance in Tree 树形dp
		
题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...
 - codeforces 337D Book of Evil (树形dp)
		
题目链接:http://codeforces.com/problemset/problem/337/D 参考博客:http://www.cnblogs.com/chanme/p/3265913 题目大 ...
 - Codeforces 1276D - Tree Elimination(树形 dp)
		
Codeforces 题面传送门 & 洛谷题面传送门 繁琐的简单树形 dp(大雾),要是现场肯定弃了去做 F 题 做了我一中午,写篇题解纪念下. 提供一种不太一样的思路. 首先碰到这样的题肯定 ...
 - Codeforces 543D Road Improvement(树形DP + 乘法逆元)
		
题目大概说给一棵树,树的边一开始都是损坏的,要修复一些边,修复完后要满足各个点到根的路径上最多只有一条坏的边,现在以各个点为根分别求出修复边的方案数,其结果模1000000007. 不难联想到这题和H ...
 
随机推荐
- Nginx 的简单使用 (IIS,Asp.Net)
			
Nginx 的一些常见功能(windows,AspNet ,IIS) 下载 官方网站:https://nginx.org/en/download.html 下载,解压缩是这个样子 启动: 启动方式有两 ...
 - Mac Android 配置环境变量
			
进入终端,输入以下命令: cd ~ touch .bash_profile //没有该文件的话新建一个 vi .bash_profile //vim 形式打开 输入内容jdk变量配置内容: expor ...
 - 一个项目中:只能存在一个 WebMvcConfigurationSupport (静态文件失效之坑)
			
一个项目中:只能存在一个 WebMvcConfigurationSupport 在一个项目中WebMvcConfigurationSupport只能存在一个,多个的时候,只有一个会生效. 静态文件访问 ...
 - UE4 游戏模块初始化顺序
			
最近看教学,有个讲解UE4初始化顺序的,记录一下. 首先创建一个Actor,Character,GameInstance,GameMode,LevelScriptActor(关卡),PlayerCon ...
 - powershell小脚本--批量添加用户属性----导出登录时间
			
需求1:某公司所有员工少了MAIL属性,需要批量添加.例如,用户chenyy 添加邮件属性chenyy@xxxx.com 先导出(只导出名字)备用: Get-ADUser -Filter * -Pr ...
 - word 文档导出 (freemaker+jacob)--java开发
			
工作中终于遇到了 需要导出word文旦的需求了.由于以前没有操作过,所以就先百度下了,基本上是:博客园,简书,CDSN,这几大机构的相关帖子比较多,然后花了2周时间 才初步弄懂. 学习顺序: 第一阶 ...
 - 探秘最小生成树&&洛谷P2126题解
			
我在这里就讲两种方法 Prim 和 Kruscal Kruscal kruscal的本质其实是 排序+并查集 ,是生成树中避圈法的推广 算法原理如下 (1)将连通带权图G=<n,m>的各条 ...
 - Python基础总结之初步认识---class类的继承(下)。第十五天开始(新手可相互督促
			
年薪百万的步伐慢了两天hhhh严格意义是三天.最近买了新的玩具,在家玩玩玩!~~~~ 今天开始正式认识类的继承.类的继承是怎么继承呢?看下代码: class Animal(object): #父类 d ...
 - Activiti6系列(4)- 三个war包的数据源及密码修改
			
一.activiti-app修改数据源和密码 1.使用sublimetext工具打开tomcat,方便进行配置文件的修改. 找到被解压的war包,activiti-app/WEB-INF/classe ...
 - 11、增强型for循环对二维数组的输出(test8.java)
			
由于笔者原因,这部分知识,尚不能整理出代码,笔者会好好学习增强型for循环中迭代起的相关知识,在笔者有能力,书写好这段代码后,将对本篇文章,进行二次修改,也同时欢迎大家与笔者交流,共同学习,共同进步. ...