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

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

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

输入格式

第一行一个整数N(1 ≤ N ≤ 16000)N(1≤N≤16000)。表示原始的那株花卉上共NN朵花。

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

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

输出格式

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

输入输出样例

输入 #1复制

7
-1 -1 -1 1 1 1 0
1 4
2 5
3 6
4 7
5 7
6 7

输出 #1复制

3

说明/提示

【数据规模与约定】

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

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

这个题,比较简单,就是求一颗权值最大子树的权值,记忆化搜索,每次保留最大权值即可。、

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
vector<int>E[maxn];
int n,w[maxn],ans1=0;
void add(int x,int y)
{E[x].push_back(y);E[y].push_back(x);
}
int dp(int ver,int fa)
{int ans=w[ver];for(int i=0;i<E[ver].size();i++)if(E[ver][i]!=fa) ans+=max(0,dp(E[ver][i],ver));ans1=max(ans1,ans);return ans;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",w[i]);for(int i=1,x,y;i<=n-1;i++){scanf("%d%d",&x,&y);E[x].push_back(y);//无向图存 E[y].push_back(x);}dp(1,0); printf("%d\n",ans1);return 0;
}

洛谷P1122 最大子树和 树形DP初步相关推荐

  1. 洛谷 P1122 最大子树和 题解

    题目:P1122 最大子树和 DP - 树形DP - dfs 这题的做法被题目名字给暴露了 设 f [ i ] f[i] f[i] 为以点 i i i 为根的子树中的最大子树和 设 j j j 为 i ...

  2. Luogu P1122 最大子树和 树形DP

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

  3. 洛谷P1122最大子树和题解

    题目 一道比较好想的树形\(DP\) 完全可以用树形DP的基本思路,递归,然后取最优的方法. \(Code\) #include <iostream> #include <cstri ...

  4. 洛谷P1351 联合权值(树形dp)

    题意 题目链接 Sol 一道很简单的树形dp,然而被我写的这么长 分别记录下距离为\(1/2\)的点数,权值和,最大值.以及相邻儿子之间的贡献. 树形dp一波.. #include<bits/s ...

  5. 洛谷2015 二叉苹果树 树形DP

    https://www.luogu.org/problemnew/show/P2015 二叉苹果树 时间限制: 1 Sec  内存限制: 128 MB 题目描述 有一棵苹果树,如果树枝有分叉,一定是分 ...

  6. 洛谷 2016 战略游戏(树形DP)

    题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...

  7. 洛谷P2016 战略游戏【树形dp】

    P2016 战略游戏 时间限制 1.00s 内存限制 125.00MB 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡 ...

  8. 洛谷 1131 [ZJOI2007]时态同步——树形dp

    题目:https://www.luogu.org/problemnew/show/P1131 因为越高,调节一个影响到的越多,所以底下只要把子树间的差异消除了就行了,与其他部分的差异由更高的边调节. ...

  9. 洛谷 1351 联合权值——树形dp

    题目:https://www.luogu.org/problemnew/show/P1351 对拍了一下,才发现自己漏掉了那种拐弯的情况. #include<iostream> #incl ...

最新文章

  1. golang 结构体 map 转化为 json
  2. HTML5的 input:file上传类型控制
  3. python中怎么比较两个列表-python中比较两个列表的实例方法
  4. (转)Eclipse New Server 【无法输入server name】
  5. android开发学习之路——连连看之游戏逻辑(五)
  6. 小师妹学JVM之:GC的垃圾回收算法
  7. 【渝粤题库】广东开放大学 个人与团队管理 形成性考核
  8. [转载] python-numpy如何初始化数组值全为nan
  9. 利用密码字典暴力破解渗透目标系统
  10. 定时器 Cron表达式
  11. 微信小程序获取tabbar的高度_微信小程序自定义tabbar
  12. 暖身驱寒的三种瑜伽呼吸法
  13. 正态分布变换NDT算法原理及其在点云配准中的应用
  14. 快速收录的软文发布平台
  15. java砍价源码_(JAVA)仿拼多多砍价算法
  16. 时间序列分析复习 01 引论
  17. 【无标题】5421码 2421码 余三码
  18. vitamio视频播放器实现
  19. Unity 生成原始LUT用于外部校色相机不透明物体截图
  20. 人听到坏消息的反应_如何应对坏消息,正确传达坏消息的七个方法

热门文章

  1. linux git 删除分支,git 删除分支和回滚的实例详解
  2. glide 压缩图拍呢_用Glide-图片的压缩-图片压缩原理
  3. python异常处理优点_python自测100题(下)
  4. 计算机二级证书在学校哪里领取,计算机二级证书去哪里领取
  5. Docker镜像的多平台架构支持
  6. 【坐在马桶上看算法】算法10:二叉树
  7. spring-data-redis相关api
  8. ODB——基于c++的ORM映射框架尝试(使用)
  9. PowerDesigner的使用二
  10. python xml.dom模块解析xml