hdu-6201
Posted lesning
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu-6201相关的知识,希望对你有一定的参考价值。
贪心+树形dp
尽可能低价买入,高价卖出
设好转移规律就好了
长记性
dp[i][1] i号节点或者他的某个子孙中最低买入价格//要靠考虑路费
dp[i][0] i号节点或者他的某个子孙中最高卖出价格//要考虑路费
#include<iostream> #include<cstring> #include<algorithm> #include<vector> using namespace std; typedef long long ll; struct Node { int p; ll len; Node(int a, ll b):p(a), len(b) {} }; const int maxn = 2e5 + 7; vector<Node>G[maxn]; int n; void add(int x, int y,ll len) { G[x].push_back(Node(y,len)); } ll dp[maxn][4];//1买要小,0卖要大 ll ans = 0; int dfs(int x, int fa) { for (int i = 0; i < G[x].size(); i++) { int p = G[x][i].p; ll ln = G[x][i].len; if (p == fa) continue; dfs(p, x); dp[x][1] = min(dp[x][1], dp[p][1] + ln); dp[x][0] = max(dp[x][0], dp[p][0] - ln); } ans = max(ans, dp[x][0] - dp[x][1]); return 0; } int main() { int t; scanf("%d", &t); while (t--) { ans = 0; scanf("%d", &n); for (int i = 0; i <= n; i++) { G[i].clear(); } int be, en; ll len; for (int i = 1; i <= n; i++) { scanf("%lld", &dp[i][0]); dp[i][1] = dp[i][0]; } for (int i = 1; i < n; i++) { scanf("%d%d%lld", &be, &en, &len); add(be, en, len); add(en, be, len); } dfs(1, -1); printf("%lld ", ans); } return 0; }
以上是关于hdu-6201的主要内容,如果未能解决你的问题,请参考以下文章
HDU 6201 transaction transaction transaction DFS 图论
HDU 6201 transaction transaction transaction(拆点最长路)
HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路
hdu 6201 transaction (最短路变形——带负权最长路)
HDU - 6201 transaction transaction transaction(spfa求最长路)
hdu6201 transaction transaction transaction(from 2017 ACM/ICPC Asia Regional Shenyang Online)