lanqiao OJ 131 生命之树

简介: lanqiao OJ 131 生命之树

用户登录

f[i]表示以i为根的子树的最大权值之和

状态转移:如果子节点及其子树权值和大于0,则加入父节点u的权值,即f[u] += f[son]。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
 
using namespace std ;
const int N = 1e6 + 10 ;
typedef long long LL ;
vector<int> e[N] ;//用邻接表存储图 
int w[N] ;
int n ; 
LL res = 0 ;
LL f[N] ;
void dfs(int u , int fa){
  f[u] = w[u]
  for(int i = 0 ; i < e[u].size() ; i ++){
    int j = e[u][i] ;
    if(j != fa){//不回走父结点 
      dfs(j,u) ;
      if(f[j] > 0 ) f[u] += f[j] ;
    }
  }
  //res = max(res,f[u]);
}
int main(){
  cin >> n ;
  for(int i = 1 ; i <= n ;i ++) cin >> w[i] ;
  for(int i = 1 ; i < n ; i ++){
    int a , b ; cin >> a >> b ;
    e[a].push_back(b) ; e[b].push_back(a) ;
  }
  dfs(1,-1) ;//任选一个结点进行dfs 
  
  for(int i = 1 ; i <= n ; i ++) res = max(res,f[i]);
  cout << res << endl ;
}
目录
相关文章
|
1月前
lanqiao OJ 182 小朋友崇拜圈
lanqiao OJ 182 小朋友崇拜圈
29 2
|
1月前
lanqiao oj 131 生命之树
lanqiao oj 131 生命之树
27 0
|
1月前
lanqiao oj 17136 星球(状态压缩dp)
lanqiao oj 17136 星球(状态压缩dp)
9 0
|
1月前
lanqiao oj 1135 蓝桥幼儿园(并查集)
lanqiao oj 1135 蓝桥幼儿园(并查集)
27 0
|
1月前
|
机器人
lanqiao OJ 118 机器人塔
lanqiao OJ 118 机器人塔
13 0
|
测试技术
蓝桥 晚会节目单 (线段树)
蓝桥 晚会节目单 (线段树)
|
测试技术 C++ Perl
蓝桥 第八大奇迹 (线段树)
蓝桥 第八大奇迹 (线段树)
|
算法 Android开发 容器
LeetCode 周赛上分之旅 #35 两题坐牢,菜鸡现出原形
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
91 0
|
存储
【蓝桥杯集训·每日一题】AcWing 4309. 消灭老鼠
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 最大公约数
89 0
下一篇
无影云桌面