博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2196 Computer(树形DP经典)
阅读量:5759 次
发布时间:2019-06-18

本文共 2350 字,大约阅读时间需要 7 分钟。

Computer

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

Total Submission(s): 5925    Accepted Submission(s): 2979

Problem Description
A school bought the first computer some time ago(so this computer's id is 1). During the recent years the school bought N-1 new computers. Each new computer was connected to one of settled earlier. Managers of school are anxious about slow functioning of the net and want to know the maximum distance Si for which i-th computer needs to send signal (i.e. length of cable to the most distant computer). You need to provide this information.
Hint: the example input is corresponding to this graph. And from the graph, you can see that the computer 4 is farthest one from 1, so S1 = 3. Computer 4 and 5 are the farthest ones from 2, so S2 = 2. Computer 5 is the farthest one from 3, so S3 = 3. we also get S4 = 4, S5 = 4.
 

 

Input
Input file contains multiple test cases.In each case there is natural number N (N<=10000) in the first line, followed by (N-1) lines with descriptions of computers. i-th line contains two natural numbers - number of computer, to which i-th computer is connected and length of cable used for connection. Total length of cable does not exceed 10^9. Numbers in lines of input are separated by a space.
 

 

Output
For each case output N lines. i-th line must contain number Si for i-th computer (1<=i<=N).
 

 

Sample Input
5 1 1 2 1 3 1 1 1
 

 

Sample Output
3 2 3 4 4
 

 

Author
scnu
 

 

Recommend
lcy
 
#include
#include
#include
#include
#include
#define N 10010using namespace std;struct node{ int to,len;//下一个节点,长度 node (int x,int y) { to=x; len=y; }};int n;/*第一个dfs是先搜然后再转移状态的,用结点下方的数据更新第二个dfs是先状态转移然后再搜的,这是从结点上方进行数据更新,刚好满足题意:结点左右两个“子树”*/vector
adj[N*2];int maxn[N];//第i个点的最大权值int smaxn[N];//第i个点的第二大的权值int maxi[N];//最大权值的点int smaxi[N];//第二大权值的点void dfs1(int u,int p)//p是u的父节点{ maxn[u]=0; smaxn[u]=0; for(int i=0;i
smaxn[u])//先和第二长的距离比较,这样能记录下第二长的距离,这个数据能为下一个dfs提供判断 { smaxn[u]=maxn[v]+adj[u][i].len; smaxi[u]=v; if(maxn[u]
smaxn[v]) { smaxn[v]=adj[u][i].len+smaxn[u]; smaxi[v]=u; if(maxn[v]
smaxn[v]) { smaxn[v]=adj[u][i].len+maxn[u]; smaxi[v]=u; if(maxn[v]

 

转载于:https://www.cnblogs.com/wuwangchuxin0924/p/5794419.html

你可能感兴趣的文章
Python split() 方法
查看>>
pyspark import 可以通过 --py-files
查看>>
ios发布以后关键信息确认与nslog
查看>>
Android--从零开始开发一款文章阅读APP
查看>>
Win8 Metro(C#)数字图像处理--2.64图像高斯滤波算法
查看>>
Html5 js FileReader接口
查看>>
面试笔记【自己总结】
查看>>
Java虚拟机16:Metaspace
查看>>
Spark 底层网络模块
查看>>
New UWP Community Toolkit - RangeSelector
查看>>
51单片机开发板(W25Q16学习)
查看>>
TeamViewer远程协作软件支持哪些系统?
查看>>
php数组增加元素
查看>>
AOP AspectJ 切面 Android简单示例
查看>>
git不同分支局部代码合并 git cherry-pick
查看>>
Nancy之Cache的简单使用
查看>>
浅析如何在Nancy中使用Swagger生成API文档
查看>>
tomcat部署war包访问显示404
查看>>
java回调方法、钩子方法以及模板方法模式
查看>>
js如何生成[n,m]的随机数
查看>>