题意:某人在一棵树中在某处买物品,价格为i,在某处卖物品,价格为j,每单位距离花费价格1,求最大赚钱数。

解题关键:两次树形dp,分别求出每个点作为被减和被加情况下的最大值,最后取一下max即可。

该节点被减的情况,为他和他所在的子树上的最大值,并且是他的各父节点的被减,该节点被加情况的最大值;

该节点被加的情况,为他和他所在的子树上的最大值,并且是他的各父节点的被加,该节点被减情况的最大值。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn=1e6+;
const ll inf=1e17+;
ll head[maxn],tot,n,m,sum,val[maxn];
struct edge{
ll to;
ll nxt;
ll w;
}e[maxn<<];
void add_edge(int u,int v,int w){
e[tot].to=v;
e[tot].w=w;
e[tot].nxt=head[u];
head[u]=tot++;
} ll dp[maxn],cnt[maxn],ans,dp2[maxn]; void dfs(ll u,ll fa){
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].to;
int w=e[i].w;
if(v==fa) continue;
dfs(v,u);
dp[u]=max(dp[v]+val[v]-w-val[u],dp[u]);
dp2[u]=max(dp2[v]-val[v]-w+val[u],dp2[u]);
}
} inline int read(){
char k=;char ls;ls=getchar();for(;ls<''||ls>'';k=ls,ls=getchar());
int x=;for(;ls>=''&&ls<='';ls=getchar())x=(x<<)+(x<<)+ls-'';
if(k=='-')x=-x;return x;
} int main(){
int k=;
int T;
T=read();
while(T--){
n=read();
memset(dp,,sizeof dp);
memset(head,-,sizeof head);
memset(dp2,,sizeof dp2);
tot=;
sum=;
int a,b,c;
for(int i=;i<=n;i++) val[i]=read();
for(int i=;i<n-;i++){
a=read();
b=read();
c=read();
add_edge(a,b,c);
add_edge(b,a,c);
}
dfs(,-);
ll ans=-inf;
for(int i=;i<=n;i++){
ans=max(ans,dp[i]);
ans=max(ans,dp2[i]);
}
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. 提交数据url太长导致提交失败
  2. libsvm 训练后的模型参数讲解(转)
  3. CircleLayout
  4. ASP.NET CS文件中输出JavaScript脚本的3种方法以及区别
  5. 数据结构(树状数组):HEOI2012 采花
  6. AndroidStudio常见提示
  7. 我的学习笔记之API-Guides翻译------AppComponent_Activites
  8. Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置
  9. 你连Nginx怎么转发给你请求都说不清楚,还好意思说自己不是CRUD工程师?
  10. 第二章 Android系统与嵌入式开发
  11. 3.7 unittest之断言
  12. Deep Learning - 2 反向传播
  13. 从0移植uboot(三) _编译最小可用uboot
  14. Codeforces Round #499 (Div. 2) C. Fly(数学+思维模拟)
  15. mongodb启动出现Failed to connect to 127.0.0.1:27017 after 5000ms milliseconds,giving up
  16. Docker基础-搭建本地私有仓库
  17. [Backbone]7. Collection Views, Custom Events
  18. vcs github gitlab git名词解释
  19. jQuery懒加载插件 – jquery.lazyload.js
  20. IEEP-OSPF域内路由故障-现象与排障思路

热门文章

  1. VC++ 非托管代码 &amp; 托管代码
  2. NuGet管理工具安装
  3. UITableView使用指南
  4. 九度OJ 1008:最短路径问题 (最短路)
  5. python cookbook第三版学习笔记四:文本以及字符串令牌解析
  6. Android LinearLayout线性布局
  7. g2o求解BA 第10章
  8. hdu 2015校赛1002 Dual horsetail (思维题 )
  9. POJ 3620 Avoid The Lakes(dfs算法)
  10. TEE&amp;TrustZone