HDU 2196 Computer( 树上节点的最远距离 )
2015-06-10 21:32
435 查看
Computer
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4080 Accepted Submission(s): 2043
[align=left]Problem Description[/align]
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.
#include <bits/stdc++.h> using namespace std ; const int N = 10010 ; int dp [2] , son [2] , ans , n ; int eh , et[N<<1] , nxt[N<<1] , ew[N<<1] , tot ; void init() { memset( eh , -1 , sizeof eh ); tot = 0 ; } void addedge( int u , int v , int w ) { et[tot] = v ; ew[tot] = w ; nxt[tot] = eh[u] ; eh[u] = tot++ ; et[tot] = u ; ew[tot] = w ; nxt[tot] = eh[v] ; eh[v] = tot++ ; } int Dp( int u , int fa ) { for( int i = eh[u] ; ~i ; i = nxt[i] ) { int v = et[i] , w = ew[i] ; if( v == fa ) continue ; int tmp = Dp( v , u ) + w ; if( tmp > dp[u][1] ) { dp[u][1] = tmp ; son[u][1] = v ; } if( dp[u][1] > dp[u][0] ) { swap( dp[u][1] , dp[u][0] ) ; swap( son[u][1] , son[u][0]) ; } } return dp[u][0] ; } void Solve( int u , int fa , int tmp ) { ans[u] = max( dp[u][0] , tmp ) ; for( int i = eh[u] ; ~i ; i = nxt[i] ) { int v = et[i] , w = ew[i] ; if( v == fa ) continue ; if( v == son[u][0] ) { Solve( v , u , max( dp[u][1] , tmp ) + w ) ; } else { Solve( v , u , max( dp[u][0] , tmp ) + w ) ; } } } int main () { while( ~scanf("%d",&n) ) { init(); for( int i = 2 ; i <= n ; ++i ) { int v , w ; scanf("%d%d",&v,&w); addedge( i , v , w ) ; } memset( dp , 0 , sizeof dp ) ; Dp( 1 , 0 ); //for( int i = 1 ; i <= n ; ++i ) cout << i << ' ' << dp[i][0] << ' ' << dp[i][1] << endl ; Solve( 1 , 0 , 0 ); for( int i = 1 ; i <= n ; ++i ) printf("%d\n",ans[i]); } return 0 ; }
View Code
相关文章推荐
- 黑马程序员——Java基础——File、Properties类
- JQuery上传插件Uploadify使用详解
- Android中的线程通讯类Handler
- 在Fedora 18中将普通用户设置为sudo权限
- POJ 1028
- Training:母函数
- [容斥原理] zoj 3556 How Many Sets I
- Hadoop日志以及日志的格式和命名组成
- 【PHP学习】PHP 简介
- 清除缓存功能的实现代码
- C++常见错误总结(不定时更新版~)
- 实现一个通讯录并将信息保存到文本中
- Adobe Flash Player ActiveX 不能安装的解决方法
- 【MATLAB 从零到进阶】day2 矩阵 数组
- WEBSHELL跳板REDUH使用说明
- uitableview持续练习
- 关于druid数据连接池抛出的 connection holder is null 异常
- Linux(CentOS)SSH无密码验证登陆
- Action的执行
- 在手机上使用Win7系统-桌面虚拟化单机POC环境(一)