博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1122 最大子树和
阅读量:5776 次
发布时间:2019-06-18

本文共 1364 字,大约阅读时间需要 4 分钟。

题目描述

小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题。一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题。于是当日课后,小明就向老师提出了这个问题:

一株奇怪的花卉,上面共连有N 朵花,共有N-1条枝干将花儿连在一起,并且未修剪时每朵花都不是孤立的。每朵花都有一个“美丽指数”,该数越大说明这朵花越漂亮,也有“美丽指数”为负 数的,说明这朵花看着都让人恶心。所谓“修剪”,意为:去掉其中的一条枝条,这样一株花就成了两株,扔掉其中一株。经过一系列“修剪“之后,还剩下最后一 株花(也可能是一朵)。老师的任务就是:通过一系列“修剪”(也可以什么“修剪”都不进行),使剩下的那株(那朵)花卉上所有花朵的“美丽指数”之和最 大。

老师想了一会儿,给出了正解。小明见问题被轻易攻破,相当不爽,于是又拿来问你。

输入输出格式

输入格式:

输入文件maxsum3.in的第一行一个整数N(1 ≤ N ≤ 16000)。表示原始的那株花卉上共N 朵花。

第二行有N 个整数,第I个整数表示第I朵花的美丽指数。

接下来N-1行每行两个整数a,b,表示存在一条连接第a 朵花和第b朵花的枝条。

输出格式:

输出文件maxsum3.out仅包括一个数,表示一系列“修剪”之后所能得到的“美丽指数”之和的最大值。保证绝对值不超过2147483647。

输入输出样例

输入样例#1:
7-1 -1 -1 1 1 1 01 42 53 64 75 76 7
输出样例#1:
3

说明

【数据规模与约定】

对于60%的数据,有N≤1000;

对于100%的数据,有N≤16000。

 

由于是无根树,所以可以随便选一点当树根,然后开始DP遍历,如果子树权值大于0,就加上,否则舍去。

1 /**/ 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 const int mxn=50000;10 vector
e[mxn];11 int w[mxn];12 int dp[mxn],vis[mxn];13 int n;14 int ans=0;15 int dfs(int x){16 for(int i=0;i
0) dp[x]+=res;22 }23 }24 ans=max(ans,dp[x]);25 return dp[x];26 }27 int main(){28 scanf("%d",&n);29 int i,j;30 for(i=1;i<=n;i++){31 scanf("%d",&w[i]);32 dp[i]=w[i];33 }34 int u,v;35 for(i=1;i

 

转载于:https://www.cnblogs.com/SilverNebula/p/5750625.html

你可能感兴趣的文章
收购摩托罗拉获批准 谷歌“软硬兼施”反击苹果
查看>>
使用正规表达式编写更好的SQL
查看>>
centos7.0系统lvs安装部署
查看>>
javascript 基础(typeof和instanceof)
查看>>
Mysql中错误日志、binlog日志、查询日志、慢查询日志简介
查看>>
git总结
查看>>
链表实现图书管理
查看>>
TP5+layui表格使用(更新中)
查看>>
Object类中的toString()方法
查看>>
百度统计图表Echarts的php实现类,支持柱形图、线形图、饼形图
查看>>
postgresql数据库体系结构
查看>>
spring mvc 基础配置
查看>>
skyline 加载wms图层
查看>>
微招聘:我说的不只是概念
查看>>
mysql 数据库的导入导出
查看>>
Linux操作系统下oracle数据库中不存在scott用户的解决方案
查看>>
修改代码的艺术
查看>>
find查找系统文件,并显示时间大小
查看>>
.NET/ASP.NET 4.5 Bundle组件(捆绑、缩小静态文件)
查看>>
制作图表库
查看>>