一般这种 “分段,求每段极值和的最大值” 的题都有两个结论:

  1. 一段的最大值和最小值一定是该段的两个端点。

    证明:如果不是的话:那么我们显然可以把最小值和最大值所在位置之间的部分提取出来作为一段,而其他的部分分离出去,这样得到的答案肯定不劣。

  2. 一段肯定是单调不增或单调不降的。

    证明:如果不是的话:假设该段为 a1,a2,⋯,ana_1,a_2,\cdots,a_na1​,a2​,⋯,an​。由结论1,我们可以假设 a1a_1a1​ 该段的最小值、ana_nan​ 为该段的最大值(a1a_1a1​ 为最大、ana_nan​ 为最小同理)。然后若此段不是单调不降的,那么我们找到某一个 amid>amid+1a_{mid}>a_{mid+1}amid​>amid+1​ 的位置,然后把该段划分为新的两段 a1,⋯,amida_1,\cdots,a_{mid}a1​,⋯,amid​ 和 amid+1,⋯,ana_{mid+1},\cdots,a_namid+1​,⋯,an​,这样得到的答案肯定是更优的。

那么这题相当于把序列上的问题转移到树上,那么直接设 dpu,0/1dp_{u,0/1}dpu,0/1​ 表示只考虑 uuu 子树内,其中 uuu 所在段是单调不增/单调不升的最优答案。

#include<bits/stdc++.h>#define N 100010
#define ll long longusing namespace std;inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^'0');ch=getchar();}return x*f;
}int n,w[N];
int cnt,head[N],nxt[N],to[N];
ll dp[N][2];//0 上升 1 下降 void adde(int u,int v)
{to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
}void dfs(int u)
{ll sum=0;for(int i=head[u];i;i=nxt[i]){int v=to[i];dfs(v);sum+=max(dp[v][0],dp[v][1]);}for(int i=head[u];i;i=nxt[i]){int v=to[i];if(w[v]>=w[u]) dp[u][0]=max(dp[u][0],sum-max(dp[v][0],dp[v][1])+w[v]-w[u]+dp[v][0]);if(w[v]<=w[u]) dp[u][1]=max(dp[u][1],sum-max(dp[v][0],dp[v][1])+w[u]-w[v]+dp[v][1]);}dp[u][0]=max(dp[u][0],sum);dp[u][1]=max(dp[u][1],sum);
}int main()
{n=read();for(int i=1;i<=n;i++) w[i]=read();for(int i=1;i<n;i++){int u=read(),v=read();adde(u,v);}dfs(1);printf("%lld\n",max(dp[1][0],dp[1][1]));return 0;
}
/*
7
5 5 3 6 2 3 3
1 6
5 3
1 5
6 2
2 4
6 7
*/
/*
4
2 3 4 1
1 2
2 3
3 4
*/

【XSY3331】东非大裂谷(结论,DP)相关推荐

  1. 【BZOJ4660】Crazy Rabbit 结论+DP

    [BZOJ4660]Crazy Rabbit Description 兔子们决定在自己的城堡里安排一些士兵进行防守.给出 n 个点的坐标,和城堡里一个圆心在原点的圆形的障碍,兔子们希望从中选出 k 个 ...

  2. 关于dpi、dp与sp的基础了解

    做android开发还有面试的时候经验会遇到屏幕适配问题,Android由于机型太多,所以导致屏幕尺寸还有分辨率多样化.接下来讲解下DP.DPI.SP的概念,有些不对的地方欢迎指正 引用Andorid ...

  3. NOIP 2018 普及组 解题报告

    比完小结 今年的题目出的有点诡异,难度跨越有点大 入门 to 普及- to(注意:前方东非大裂谷,请小心慢行) 提高+/省选- to 提高+/省选- 不过实际上没有这么难 T3.T4 一个DP 一个暴 ...

  4. 最强大脑----“汉字女英雄”填字游戏研究

    最强大脑----"汉字女英雄"填字游戏研究 一.引子 江苏卫视的<最强大脑>2014年1月17日星期五第三期第一个节目,是"汉字女英雄"胡小玲所表演 ...

  5. 进化论--人类最大的科学误区(2)

    3 进化论三大证据的破灭 不迷在具体的专业术语里就事论事,在宏观上,一个有趣的逻辑分析否定了进化论的证明思路.对此,各种知识背景的读者都能明白. 进化论的立足,主要有三大方面的证据:比较解剖学.古生物 ...

  6. 我要是长得和姚明一样高,是不是也能打进NBA?

    他出生时体重达5公斤,几乎是新生儿平均水平的2倍.他的父亲和祖父的身高都在2米以上.他的父母都曾是篮球运动员.小学五年级时,他的身高就超过了1.8米.他是第一个通过"选秀"进入NB ...

  7. Vijos——T 1082 丛林探险

    https://vijos.org/p/1082 描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,B ...

  8. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...

  9. 地球上这10个奇幻景观,带你踏入外太空

    全世界只有3.14 % 的人关注了 爆炸吧知识 大蓝洞 大蓝洞是灯塔礁的一部分,位于洪都拉斯伯利兹城陆地大约100公里之遥,是一个较大的完美环状海洋深洞,是当今世界最吸引人的潜水地点之一. 305米的 ...

  10. 美国签证过不了,ICLR 2020搬到埃塞俄比亚,同性恋学者:不去,保命要紧

    郭一璞 发自 北境凛冬  量子位 报道 | 公众号 QbitAI 美国签证真是越来越难搞了,尤其在川普上台后,签证没过已经成为了阻挠广大地球人民读书.学习.旅游.炼丹--的最大理由. 于是,Yoshu ...

最新文章

  1. 万字干货介绍WebAR的实现与应用
  2. 图论--欧拉路,欧拉回路(小结)
  3. 利用PCA进行数据降维
  4. Firefox做默认浏览器,点击QQ面板连接(QQ邮箱,空间),延迟很久很久才打开网页(Firefox 浏览器 延迟 打开 点击没反应)...
  5. cocos2d-x学习笔记03:绘制基本图元
  6. unity3d Vector3.Lerp解析
  7. SimpleDateFormat使用方法详解
  8. 软件工程六大设计原则总结,案例演示
  9. 实验5.4 编程实现两字符串的连接(使用string类定义字符串对象)
  10. java web 中的乱码
  11. 整数数组的最大子数组
  12. 物联网在发展上,特别是消费性产品,为何进展如此缓慢?
  13. struts转换器详解
  14. 怎样把PDF文件压缩变小?
  15. 聚合广告SDK开发(一)——基础知识
  16. 为什么U盘中的文件夹和文件全部变成了快捷方式?
  17. 初始化Linux数据盘(fdisk)
  18. CDN防护和高防服务器哪个更适合网站?
  19. 张飞硬件设计开发笔记(第一部)
  20. 刘未鹏之思维改变生活!

热门文章

  1. centos 安装 时间校准与定时同步
  2. 利用PaddleDetection 训练自定义VOC数据集进行目标检测
  3. pve 不订阅更新_炉石传说pve冒险到底好玩在哪里?绯夜千雪来告诉你!
  4. amd cpu排行_AMD R5系列处理器性能排名 CPU天梯图2017年4月最新完整版
  5. 台式计算机没有外放声音,台式机没有音响如何外放声音
  6. “远程网络教学系统”UML用例图(练习题)
  7. 在本地电脑运行vue-element-admin
  8. 2019年新一年目标
  9. Unity自动设置keystore密匙库的信息
  10. 智能水杯设计方案_智能水杯的设计与营销