HDU-6201 transaction transaction transaction(树形dp)
2017-09-10 22:32
459 查看
2017 ACM/ICPC Asia Regional Shenyang Online
题意:
给定一个树形图,每个节点都有一个商品价格,走每条边都有一定的花费,问商人任选一个节点购买商品然后去另一个节点卖商品所能获得的最大利润。
思路:
树形dp。任选一个节点作为根节点进行dfs,对于每个节点记录其两个状态:dp[u][0]代表选取该节点及其子孙中任一节点作为起点到达当前节点所要花费的最小代价,dp[u][1]代表选取该节点及其子孙中任一节点作为终点到达当前节点所能获得的最大收入,对于每个节点,通过dp[u][1]-dp[u][0]更新答案取得最优。
代码:
继续加油~
题意:
给定一个树形图,每个节点都有一个商品价格,走每条边都有一定的花费,问商人任选一个节点购买商品然后去另一个节点卖商品所能获得的最大利润。
思路:
树形dp。任选一个节点作为根节点进行dfs,对于每个节点记录其两个状态:dp[u][0]代表选取该节点及其子孙中任一节点作为起点到达当前节点所要花费的最小代价,dp[u][1]代表选取该节点及其子孙中任一节点作为终点到达当前节点所能获得的最大收入,对于每个节点,通过dp[u][1]-dp[u][0]更新答案取得最优。
代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5+5; struct node{int v, w;}; vector<node> G[maxn]; int dp[maxn][2]; int t, n, ans; int val[maxn]; void dfs(int u, int fa) { dp[u][0] = dp[u][1] = val[u]; for(int i = 0; i < G[u].size(); ++i) { int v = G[u][i].v; if(v == fa) continue; dfs(v, u); dp[u][0] = min(dp[u][0], dp[v][0]+G[u][i].w); dp[u][1] = max(dp[u][1], dp[v][1]-G[u][i].w); } ans = max(ans, dp[u][1]-dp[u][0]); } int main() { for(scanf("%d", &t); t--;) { scanf("%d", &n); ans = 0; for(int i = 1; i <= n; ++i) scanf("%d", &val[i]), G[i].clear(); for(int i = 1; i < n; ++i) { int u, v, w; scanf("%d %d %d", &u, &v, &w); G[u].push_back((node){v, w}); G[v].push_back((node){u, w}); } dfs(1, -1); printf("%d\n", ans); } return 0; }
继续加油~
相关文章推荐
- HDU 6201 transaction transaction transaction (树形DP)
- HDU 6201 transaction transaction transaction (树形dp)
- HDU 6201 transaction transaction transaction【树形DP||SPFA最长路】
- HDU 6201 transaction transaction transaction(树形DP)
- HDU 6201 transaction transaction transaction(树形DP)
- 2017沈阳网络赛 1008 HDU 6201 transaction transaction transaction(树形dp)
- HDU 6201 transaction transaction transaction(树形dp)
- 【转】HDU 6201 树形DP 或 最长路
- HDU 6201 树形DP 或 最长路
- HDU-6201 transaction transaction transaction(树dp / 最长(短)路)
- HDU沈阳网络赛:transaction transaction transaction(树形dp & 最短路)
- HDU 6201 transaction transaction transaction dp
- HDU 6201 树形dp
- HDU 6201 transaction transaction transaction(dp)
- HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路
- HDU 6201 transaction transaction transaction (树形DP or 拆点最短路)
- hdu 6201 transaction transaction transaction tree dp
- HDU 6201 树形DP
- hdu 1561 The more, The Better 树形dp
- hdu 2196(Computer 树形dp)