当前位置: 首页 > article >正文

#Z1890. 裁枝剪叶

题目


思路

 做这道题之前可以先看看:#B. 部落联盟_草原上有n个部落,每个部落都有其坐标(xi,yi) 每个部落都有个武力值,可正可负 由于-CSDN博客

 我们可以这么做:

设以x节点为根的子树的点权和最大值为dp[x]

那么在dfs遍历树的节点时

先将dp[x]设为x的点权

然后每枚举完x的一个儿子点后判断如果dp[son] > 0,则dp[x]+=dp[son]

否则dp[x]就不用动。

最后取dp[1~n]的最大值就行了

是不是觉得恍然大悟


代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,u,v,d[100001],ans = -114514191810,dp[100001];
vector<int> vec[1000001];
void dfs(int x,int fa)
{
  dp[x] = d[x];
  for(int i = 0;i < vec[x].size();i++)
    if(fa != vec[x][i])
    {
      dfs(vec[x][i],x);
      if(dp[vec[x][i]] > 0) dp[x] += dp[vec[x][i]];
    }
}
signed main()
{
  cin>>n;
  for(int i = 1;i <= n;i++) cin>>d[i];
  for(int i = 1;i < n;i++)
  {
    cin>>u>>v;
	  vec[u].push_back(v);
	  vec[v].push_back(u);
  }
  dfs(1,0);
  for(int i = 1;i <= n;i++) ans = max(ans,dp[i]);
  cout<<ans;
  return 0;
}

结语

如果对您有帮助的话,记得点个赞支持一下QwQ疯狂明示 


http://www.kler.cn/a/228858.html

相关文章:

  • 【Eclipse平台】1Eclipse平台总体概览
  • 那些知名的IT证书 之 AWS篇
  • 【QT+QGIS跨平台编译】之二十四:【GeoTIFF+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • js中this对象的理解(深度解析)
  • 智能优化算法 | Matlab实现合作优化算法(CSA)(内含完整源码)
  • 【如何学习CAN总线测试】——UDS诊断自动化测试(含CAPL源码)
  • 【Elasticsearch】从入门到精通
  • LLM应用开发与落地:使用gradio十分钟搭建聊天UI
  • AI嵌入式K210项目(27)-条形码识别
  • 构建高效直播美颜系统:美颜SDK集成与性能优化指南
  • js中原始类型和对象引用
  • Nginx反向代理WebSocket
  • 【国产MCU】-CH32V307-模拟/数字转换器(ADC)
  • Redis核心技术与实战【学习笔记】 - 14.Redis 旁路缓存的工作原理及如何选择应用系统的缓存类型
  • 深度学习本科课程 实验5 循环神经网络
  • ReactNative实现文本渐变
  • 【Spring连载】使用Spring Data访问Redis(十一)----Redis事务 Transactions
  • 关于可变类型和不可变类型的探究
  • MacOS系统电脑远程桌面控制windows系统电脑【内网穿透】
  • AI监控+智能充电桩系统如何缓解新能源汽车充电难问题