首页 > 其他 > 详细

ZUCC2129 The Tree of Power(树形DP)

时间:2020-05-31 23:06:42      阅读:34      评论:0      收藏:0      [点我收藏+]

树上最大子列和,开一个dp数组表示以当前节点为起点的路线最大能量值为多少,然后就是一些状态的转移。

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
typedef long long ll;
vector<int> g[maxn];
ll dp[maxn];//表示以第i个节点为起点的路线的最大力量值
ll a[maxn];
int N;
void dfs (int u,int pre) {
    dp[u]=a[u];
    for (int i=0;i<g[u].size();i++) {
        int v=g[u][i];
        if (v==pre) continue;
        dfs(v,u);
        dp[u]+=dp[v];
        if (dp[u]<0) dp[u]=0;
    }
} 
int main () {
    int T;
    scanf("%d",&T);
    while (T--) {
        scanf("%d",&N);
        dp[0]=0;
        for (int i=1;i<=N;i++) scanf("%lld",&a[i]),dp[i]=0,g[i].clear();
        for (int i=1;i<N;i++) {
            int u,v;
            scanf("%d%d",&u,&v);
            g[u].push_back(v);
            g[v].push_back(u);
        }
        ll ans=0;
        dfs(1,0);
        for (int i=1;i<=N;i++) ans=max(ans,dp[i]);
        cout<<ans<<"\n";
    }
} 

 

ZUCC2129 The Tree of Power(树形DP)

原文:https://www.cnblogs.com/zhanglichen/p/13022019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!