#include <bits/stdc++.h>
using namespace std;
const int N=1e4+;
struct T {
int to;
int w;
};
vector < vector <T> > g (N);
int d[N][];// d[i][0] 正向最大距离 d[i][1] 正向次大距离 d[i][2] 反向最大距离
int p[N]; // 正向最大距离所经过的子节点
int n;
void dfs1(int root) {//求正向距离
p[root]=d[root][]=d[root][]=d[root][]=;
for (int i=;i<g[root].size();i++) {
int _next=g[root][i].to;
int cost=g[root][i].w;
dfs1(_next);
if (d[root][]<d[_next][]+cost) {
d[root][]=d[root][];
d[root][]=d[_next][]+cost;
p[root]=_next;
}
else if (d[root][]<d[_next][]+cost)
d[root][]=d[_next][]+cost;
}
return ;
}
void dfs2(int root) {//求逆向距离
for (int i=;i<g[root].size();i++) {
int _next=g[root][i].to;
int cost=g[root][i].w;
if (_next!=p[root]) d[_next][]=max (d[root][],d[root][])+cost;
else d[_next][]=max (d[root][],d[root][])+cost;
dfs2(_next);
}
return ;
}
int main ()
{
while (~scanf ("%d",&n)) {
for (int i=;i<=n;i++) g[i].clear();
for (int i=;i<=n;i++) {
int x,cost; scanf ("%d %d",&x,&cost);
T tmp={i,cost}; g[x].push_back(tmp);
}
int root=;
dfs1(root);
dfs2(root);
for (int i=;i<=n;i++)
printf ("%d\n",max (d[i][],d[i][]));
}
return ;
}

hdu-2196 树形dp 求一个树中所有节点能到达的最远距离f[i] (其实也不难嘛!)的更多相关文章

  1. HDU 2196树形DP(2个方向)

    HDU 2196 [题目链接]HDU 2196 [题目类型]树形DP(2个方向) &题意: 题意是求树中每个点到所有叶子节点的距离的最大值是多少. &题解: 2次dfs,先把子树的最大 ...

  2. HDU 2196 树形DP Computer

    题目链接:  HDU 2196 Computer 分析:   先从任意一点开始, 求出它到其它点的最大距离, 然后以该点为中心更新它的邻点, 再用被更新的点去更新邻点......依此递推 ! 代码: ...

  3. hdu 2196 树形dp

    思路:先求以1为根时,每个节点到子节点的最大长度.然后再次从1进入进行更新. #include<iostream> #include<cstring> #include< ...

  4. 树形DP求各点能走到的最远距离

    hdu2196 Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. HDU 4514 - 湫湫系列故事——设计风景线 - [并查集判无向图环][树形DP求树的直径]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  6. hdu 4123 树形DP+RMQ

    http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...

  7. hdu 4607 (树形DP)

    当时比赛的时候我们找出来只要求出树的最长的边的节点数ans,如果要访问点的个数n小于ans距离直接就是n-1 如果大于的话就是(n-ans)*2+ans-1,当时求树的直径难倒我们了,都不会树形dp ...

  8. 浅谈关于树形dp求树的直径问题

    在一个有n个节点,n-1条无向边的无向图中,求图中最远两个节点的距离,那么将这个图看做一棵无根树,要求的即是树的直径. 求树的直径主要有两种方法:树形dp和两次bfs/dfs,因为我太菜了不会写后者这 ...

  9. hdu 4607 树形dp 树的直径

    题目大意:给你n个点,n-1条边,将图连成一棵生成树,问你从任意点为起点,走k(k<=n)个点,至少需要走多少距离(每条边的距离是1): 思路:树形dp求树的直径r: a:若k<=r+1 ...

随机推荐

  1. Linux软件源书写格式解析及本地yum源制作

    1.Debian类系统 配置文件:/etc/apt/sources.list 例子:deb https://mirrors.aliyun.com/kali kali-rolling main cont ...

  2. Struts 2 初步入门(六)之处理结果类型

    Struts2 处理流程: 用户请求--->struts框架--->Action控制器--->struts框架--->视图资源 xml配置文件里: <result nam ...

  3. elasticsearch设置外部可访问

    修改/config/elasticsearch.yml文件,增加如下配置: network.host: 0.0.0.0 浏览器访问http://192.168.17.134:9200/效果: 实际操作 ...

  4. radio选择

    input标签radio单选 <tr> <th style="font-weight: bolder;text-align: right;width:18%" & ...

  5. ubuntu下唤醒或休眠远程计算机

    ubuntu让我明白,没有什么完美的东西,要想完美必须付出代价.要么花时间折腾,要么花时间赚钱买系统. 人生也是一样,所以不要期待什么完美.哪有那么好的人,在合适的时间合适的地点让你遇见,还对你有感觉 ...

  6. ci框架memcached使用

    首先第一步需要安装memcached扩展 安装方法这里就不叙述了 application/config/memcached.php配置 $config = array( 'default' => ...

  7. day05 可变不可变类型

    #可变类型: 值变了,但是id没有变,证明没有生成新的值而是在改变原值,原值是可变类型#不可变类型:值变了,id也跟着变,证明是生成了新的值而不是在改变原值,原值是不可变 # x=10# print( ...

  8. 《Python》网络编程之验证客户端连接的合法性、socketserver模块

    一.socket的更多方法介绍 # 服务端套接字函数 s.bind() # 绑定(主机,端口号)到套接字 s.listen() # 开始TCP监听 s.accept() # 被动接受TCP客户的连接, ...

  9. 十六. Python基础(16)--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

  10. Python select 详解(转)

    I/O多路复用是在单线程模式下实现多线程的效果,实现一个多I/O并发的效果.看一个简单socket例子: import socket SOCKET_FAMILY = socket.AF_INET SO ...