最大子树和

news/2024/11/14 16:14:03/文章来源:https://www.cnblogs.com/Shumian/p/18546240

题目链接:最大子树和

题目描述:

小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题。一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题。于是当日课后,小明就向老师提出了这个问题:
一株奇怪的花卉,上面共连有\(N\)朵花\(N−1\)条枝干将花儿连在一起,并且未修剪时每朵花都不是孤立的。每朵花都有一个“美丽指数”,该数越大说明这朵花越漂亮,也有“美丽指数”为负数的,说明这朵花看着都让人恶心。所谓“修剪”,意为:去掉其中的一条枝条,这样一株花就成了两株,扔掉其中一株。经过一系列“修剪“之后,还剩下最后一株花(也可能是一朵)。老师的任务就是:通过一系列“修剪”(也可以什么“修剪”都不进行),使剩下的那株(那朵)花卉上所有花朵的“美丽指数”之和最大。
老师想了一会儿,给出了正解。小明见问题被轻易攻破,相当不爽,于是又拿来问你。

输入格式:

第一行:一个整数n\((1 \le N \le 16000)\).表示原始的那株花卉上共\(n\)朵花
第二行有\(n\)个整数,第\(i\)个整数表示第\(i\)朵花的美丽指数.
接下来\(n-1\)行 每一行两个整数\(a,b\),表示存在a和b的枝条

输出格式:

一个数,表示一系列“修剪”之后所能得到的“美丽指数”之和的最大值。保证绝对值不超过 \(2147483647\)

分析:

很明显的树型dp,但是这题没有明确告诉我们祖宗关系 所以我们要选定一个祖宗结点或者用,并且要建双向边.
状态表示\(f[i]\)记录以\(i\)为根的子树中,点权和最大的一颗子树
开始时,\(f[u]=a[u]\),接下来对于\(u\)的每颗子树我们都可以选择是否剪枝.
对于u的儿子v,如果\(f[v]<0\)那么就要剪掉u->v这条边().
那么状态转移方程:\(f[u]=f[u]+(f[v]>0?f[v]:0)(v为u的儿子)\)

注意:我们建的双向边,所以在遍历儿子的时候不能遍历到其父亲

#include<bits/stdc++.h>
using namespace std;
const int N  =1.7e4;
int f[N];
int main()
{int n;cin>>n;for(int i=1;i<=n;i++)cin>>f[i];vector<vector<int>>adj(n+1);for(int i=1;i<n;i++){int a,b;cin>>a>>b;adj[a].push_back(b);adj[b].push_back(a);}vector<bool>vis(n+1,false);function<void(int,int)>dfs=[&](int u,int fa){for(auto v:adj[u]){   if(v!=fa){   dfs(v,u);if(f[v]>0)f[u]+=f[v];}}};int res=-2147483647;dfs(1,0);for(int i=1;i<=n;i++)res=max(res,f[i]);cout<<res<<endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

皮带跑偏识别智慧矿山一体机皮带运行状态识别如何与EasyCVR平台搭建煤矿矿井安全监控系统?

在煤矿行业,安全始终是最为关键的议题。随着智能化技术的发展,智慧矿山一体机与EasyCVR平台的结合为煤矿矿井安全监控系统提供了一种全新的解决方案。这种集成化的系统不仅能够实现对煤矿生产过程的实时监控和管理,还能提高矿山的安全性和生产效率,同时降低人工巡检的成本和…

vmstat的使用

1.用法 vmstat [-a] [-n] [-S unit] [delay [ count]] vmstat [-s] [-n] [-S unit] vmstat [-m] [-n] [delay [ count]] vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V] -a:显示活跃和非活跃内存 -f:显示从系…

PNP和NPN三极管区别

主要区别是电流流向和电压不同:1. PNP管子是发射极流入后从基极和集电极流出,NPN管子是基极和集电极流入从发射极流出。 2. PNP管子工作在放大区时电压是,Ue>Ub>Uc,NPN管子工作在放大区时电压时Uc>Ub>Ue。 3. PNP是共阴极,即两个PN结的N结相连做为基极,…

关于伺服电子齿轮比

一、首先是术语解释: 1.编码器分辨率:多少个脉冲每转。如分辨率为18位,代表需要发262144个脉冲转一圈。2.脉冲当量:发一个脉冲,电机能走多少距离,也就是电机的最小精度。 3.丝杆螺距:表示丝杆转一圈多少毫米。 4.减速比:A(从轮):B(主轮) 5.电子齿轮比:分子是电机编码器…

ubuntu destop修改终端字体大小(Terminal)

背景 初始字体太大,窗口小,看不了几行 调整效果舒服多了 可根据自己的需要做调整

CBT

设置扬声器阵列,预先设置扬声器阵列的覆盖角 根据扬声器阵列的覆盖角得到截止频率F 将音频信号小于截止频率F的频段采用空间重采样法进行恒定束宽控制;将音频信号大于或等于截止频率F的频段采用CBT阵列理论进行恒定束宽控制;基本流程图如下:step1: 首先,确定系统参数. 根据…

使用IDEA插件(dbDoc)生成数据库字典

https://blog.csdn.net/taotao6086/article/details/123324472 https://github.com/godmaybelieve

视频智能分析网关视频分析网关吸烟检测预警厂区吸烟行为监测系统

在工业生产和公共安全管理中,吸烟行为的监测和控制是一个重要而紧迫的问题。尤其是在厂区这样的特殊环境中,吸烟不仅违反了安全生产规定,更可能引发火灾等严重安全事故。随着人工智能技术的发展,吸烟检测视频分析网关应运而生,为厂区吸烟行为监测提供了一种高效、智能的解…

时区计算,冬夏令时, 计算历史某一刻的某地区的时区

首先来聊聊冬夏令时 ‌冬令时和夏令时是为了节约能源和充分利用光照资源而设立的时间制度。‌在夏季,许多国家和地区会将时钟拨快一小时,称为夏令时,以便让人们早起早睡,减少照明用电。而在冬季,时钟会拨回标准时间,称为冬令时。‌ 历史背景和实施国家 夏令时的概念最早由…

【跟着阿舜学音乐-笔记】1.09音程与协和度

音程 音程是指两个音之间的距离,即一个音到另一个音经过了多少个音高的音高单位。 其中,所经历的音高单位的数量叫做音数。具有不同音数的音之间的距离叫做度。 音程的下方较低的音称为根音(该说法也用于和弦中,指原位中最低的音),上方较高的音称为冠音。以下给出各音程的…

find me-WP

首先给了四张图片第一张宽高有问题修复一下,之后感觉不对劲少了IDAT,修复一下 49444154就好了 修复好第一张图片之后发现了二维码ZmxhZ3s0X3 在第二张图片发现了压缩包提取出来但解压不了 需要把7Z换成PK解压之后在618发现1RVcmVfc 第四张图片发现cExlX1BsY 第五张Yzcllfc0lN…

某大型商超客户采购数据分析(Spark实战)

写了一些使用sparksql以及spark机器学习来进行数据分析的东西,希望能给大家做一些参考项目需求:对某大型商超客户采购数据集进行数据分析 数据来源:https://www.heywhale.com/mw/dataset/656069b19a74cc18269207c4/content首先使用Spark读入数据集,读入文件前要先将文件转为…