E60 树形DP+贪心 P3574 [POI2014] FAR-FarmCraft

news/2024/9/28 11:20:25

视频链接:

 

 

 

P3574 [POI2014] FAR-FarmCraft - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

// 树形DP+贪心 O(nlogn)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;const int N=500005;
int head[N],to[N<<1],ne[N<<1],idx;
void add(int x,int y){to[++idx]=y,ne[idx]=head[x],head[x]=idx;
}
int n,a[N],f[N],s[N],p[N];bool cmp(int x,int y){return f[x]-s[x]>f[y]-s[y];
}
void dfs(int x,int fa){f[x]=a[x];for(int i=head[x];i;i=ne[i])if(to[i]!=fa) dfs(to[i],x);int t=0;for(int i=head[x];i;i=ne[i])if(to[i]!=fa) p[++t]=to[i];sort(p+1,p+t+1,cmp);for(int i=1;i<=t;++i){f[x]=max(f[x],s[x]+1+f[p[i]]);s[x]+=s[p[i]]+2;}
}
int main(){scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d",&a[i]);for(int i=1,x,y;i<n;++i)scanf("%d%d",&x,&y),add(x,y),add(y,x);dfs(1,0);printf("%d\n",max(f[1],s[1]+a[1]));
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

NIO

NIO Java在1.4版本开始,引入了NIO,称为Java New IO。又称老的阻塞IO为OIO(Old IO)。 NIO与OIO对比:OIO是面向流,操作的是字节。NIO引入了Buffer和Channel,操作的是缓冲区。OIO是阻塞的,NIO是非阻塞的OIO没有Selector的概念NIO的三大组件如下所示。 Buffer 数据存储的媒…

京东面试:RR隔离mysql如何实现?什么情况RR不能解决幻读?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

固态硬盘接入电脑没有反应

当固态硬盘(SSD)接入电脑后没有反应时,可能由多种原因造成。以下是一些常见的原因及其解决方法: 一、物理连接问题 检查接口连接: 确保SSD的SATA接口或M.2接口(视SSD类型而定)与主板连接牢固,没有松动或错位。 检查SATA数据线或M.2插槽是否损坏,如有必要,更换新的数据…

一些超好用的 GitHub 插件和技巧

聊聊我平时使用 GitHub 时学到的一些插件、技巧。聊聊我平时使用 GitHub 时学到的一些插件、技巧。 ‍ ‍ 浏览器插件 在我的另一篇博客 浏览器插件推荐 里提到过跟 GitHub 相关的一些插件,这里重复下:Sourcegraph:在线打开项目,方便阅读,将 GitHub 变得和 IDE 一般,集成…

java第一次正式课程课后习题

s和t并非引用同一对象,不同的值引用不同对象,相同值引用相同对象。 枚举类型并非原始数据类型,而是引用数据类型。 采用.velueof和.从枚举类型中赋值效果相同。java中的数采用补码形式表示。由示例可知,局部变量与全局变量重名时会在局部屏蔽全局变量,采用局部变量。java中…

橡胶 在经历大C浪的反弹

下跌部分 开启大ABC的反弹:

九月二十八

以下代码的输出结果是什么? int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X+Y+"=X+Y"); 为什么会有这样的输出结果? 输出结果是: X+Y=100200 100200=X+Y 出现这样的输出结果是因为在Java中,当多个值连接在一起时,会根据…

九月二十七2

当需要处理非常大或非常小的数值时,应选择float或double类型。 当需要处理字符或需要较大范围的无符号整数时,应选择char类型。 当需要在内存和处理速度之间做出权衡时,可以根据需要选择适当的整数类型(byte, short, int, long)。 对于需要精确计算的场景,应避免使用浮点…