HDU 2196 Computer——树形dp
来源:互联网 发布:端口是什么 怎么查看 编辑:程序博客网 时间:2024/06/05 17:04
需要两遍dfs,一遍向上, 一遍向下
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 1e4 + 10;int n, tot, head[maxn], dp[maxn][3];void init() { tot = 0; memset(head, -1, sizeof(head));}struct Edge { int to, cost, next;}edge[maxn*2];void addedge(int u, int v, int cost) { ++tot; edge[tot].to = v, edge[tot].cost = cost, edge[tot].next = head[u]; head[u] = tot;}void dfs1(int u, int p) { for (int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].to; if (v != p) dfs1(v, u); } int pos = -1; for (int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].to, cost = edge[i].cost; if (v == p) continue; if (dp[v][0] + cost > dp[u][0]) { dp[u][0] = dp[v][0] + cost; pos = v; } } for (int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].to, cost = edge[i].cost; if (v == p || v == pos) continue; dp[u][1] = max(dp[u][1], dp[v][0] + cost); }}void dfs2(int u, int p) { for (int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].to, cost = edge[i].cost; if (v == p) continue; dp[v][2] = max(dp[u][2], (dp[v][0] + cost == dp[u][0]) ? dp[u][1] : dp[u][0]) + cost; dfs2(v, u); }}int main() { while (~scanf("%d", &n)) { init(); int v, cost; for (int i = 2; i <= n; i++) { scanf("%d %d", &v, &cost); addedge(i, v, cost); addedge(v, i, cost); } memset(dp, 0, sizeof(dp)); dfs1(1, -1); dfs2(1, -1); for (int i = 1; i <= n; i++) { printf("%d\n", max(dp[i][0], dp[i][2])); } } return 0;}
阅读全文
0 0
- HDU 2196——Computer(树形DP)
- HDU 2196 Computer——树形dp
- HDU 2196 —— Computer(树形DP)
- HDU 2196 Computer(树形dp)
- 【树形DP】 HDU 2196 Computer
- HDU 2196 Computer(树形DP)
- Hdu 2196 Computer(树形dp)
- Computer - HDU 2196 树形dp
- Hdu 2196 Computer (树形dp)
- HDU 2196 Computer | 树形dp
- 【树形DP】 HDU 2196 Computer
- HDU 2196 Computer (树形DP)
- hdu 2196 Computer (树形dp)
- *HDU 2196 - Computer(树形DP)
- [HDU 2196] Computer 树形dp
- HDU 2196Computer 树形dp
- 【hdu】2196 Computer【树形dp】
- HDU 2196 Computer [树形dp]
- 设计模式之简单工厂、工厂方法模式、抽象工厂模式
- Android中常用的设计模式——单例模式
- Spring Boot学习笔记之数据库访问
- C++输出int,float,double
- Shell根据给定路径读取其中的文件并输出到指定的路径
- HDU 2196 Computer——树形dp
- SpringMVC框架(一)
- WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制
- Javaweb的博客系统
- Win7环境下tensorflow环境搭建
- python软件安装
- Average of Levels in Binary Tree(leetcode)
- JZOJ 5439. 【NOIP2017提高A组集训10.31】Calculate
- PowerDesigner设置表字符编码 utf-8