Computer(hdu 2196)
题意:给出一棵树,求出每个点与距离它最远的点的距离。
/*
树形DP
先把无根树转为有根树,对于一个节点i来说,与它相距最远的点有两种可能,一是在它的子树中,二是不在,我们分别用f[i][0]和f[i][1]来表示。
f[i][0]很好求,从子节点向它的父亲递推就可以了。
关键在于求f[i][1],我们发现f[i][1]可能有两种情况,一是来自它父亲的子树,而是来自它父亲的f[j][1],然后判断一下就好了。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 10010
#define lon long long
using namespace std;
int head[N],vis[N],n,cnt;
lon f[N][];
struct node{int v,w,pre;}e[N*];
void add(int u,int v,int w){
e[++cnt].v=v;e[cnt].w=w;e[cnt].pre=head[u];head[u]=cnt;
e[++cnt].v=u;e[cnt].w=w;e[cnt].pre=head[v];head[v]=cnt;
}
lon dfs1(int u){
vis[u]=;
for(int i=head[u];i;i=e[i].pre){
if(vis[e[i].v]) continue;
f[u][]=max(f[u][],dfs1(e[i].v)+e[i].w);
}
return f[u][];
}
void dfs2(int u){
vis[u]=;
lon max1=,max2=;int v1,v2;
for(int i=head[u];i;i=e[i].pre){
int v=e[i].v,w=e[i].w;
if(vis[v]) continue;
if(f[v][]+w>max1){
max2=max1;v2=v1;
max1=f[v][]+w;v1=v;
}
else if(f[v][]+w>max2){
max2=f[v][]+w;v2=v;
}
}
if(u!=){
if(f[u][]>max1){
max2=max1;v2=v1;
max1=f[u][];v1=-;
}
else if(f[u][]>max2){
max2=f[u][];v2=-;
}
}
for(int i=head[u];i;i=e[i].pre){
int v=e[i].v;
if(vis[v]) continue;
if(v1!=v) f[v][]=max1+e[i].w;
else f[v][]=max2+e[i].w;
dfs2(e[i].v);
}
}
void work(){
for(int u=;u<=n;u++){
int v,w;scanf("%d%d",&v,&w);
add(u,v,w);
}
memset(vis,,sizeof(vis));
dfs1();
memset(vis,,sizeof(vis));
dfs2();
for(int i=;i<=n;i++)
cout<<max(f[i][],f[i][])<<endl;
}
int main(){
freopen("jh.in","r",stdin);
while(scanf("%d",&n)!=EOF){
memset(head,,sizeof(head));
memset(f,,sizeof(f));
cnt=;
work();
}
return ;
}
Computer(hdu 2196)的更多相关文章
- BestCoder25 1001.Harry and Magical Computer(hdu 5154) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5154 题目意思:有 n 门 processes(编号依次为1,2,...,n),然后给出 m 种关系: ...
- 2道acm编程题(2014):1.编写一个浏览器输入输出(hdu acm1088);2.encoding(hdu1020)
//1088(参考博客:http://blog.csdn.net/libin56842/article/details/8950688)//1.编写一个浏览器输入输出(hdu acm1088)://思 ...
- 树形dp(B - Computer HDU - 2196 )
题目链接:https://cn.vjudge.net/contest/277955#problem/B 题目大意:首先输入n代表有n个电脑,然后再输入n-1行,每一行输入两个数,t1,t2.代表第(i ...
- Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5064 题目意思:给出n个数:a1, a2, ..., an,然后需要从中找出一个最长的序列 b1, b ...
- 2013 多校联合 F Magic Ball Game (hdu 4605)
http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Other ...
- (多线程dp)Matrix (hdu 2686)
http://acm.hdu.edu.cn/showproblem.php?pid=2686 Problem Description Yifenfei very like play a num ...
- War Chess (hdu 3345)
http://acm.hdu.edu.cn/showproblem.php?pid=3345 Problem Description War chess is hh's favorite game:I ...
- 2012年长春网络赛(hdu命题)
为迎接9月14号hdu命题的长春网络赛 ACM弱校的弱菜,苦逼的在机房(感谢有你)呻吟几声: 1.对于本次网络赛,本校一共6名正式队员,训练靠的是完全的自主学习意识 2.对于网络赛的群殴模式,想竞争现 ...
- BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)
Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
随机推荐
- windows下使用curl.exe模拟ajax请求
curl 是一般linux发行版中都带有的小工具,利用这个工具可以很方便的下载文件,我一般使用这个工具来查看某个页面相应的HTTP头信息,在Windows系统中我们也一样可以使用这个工具,如果不需要支 ...
- 【转载】CentOS7.0下安装Telnet
1..先检查CentOS7.0是否已经安装以下两个安装包:telnet-server.xinetd.命令如下: # rpm -qa telnet-server # rpm -qa xinetd 如果没 ...
- 关于sql server 2008 r2 展开时报错:参数名:viewInfo ( Microsoft SqlServer Management SqlStudio Explorer )解决思路
今天安装了sql server 2008 R2,安装成功之后我打开软件登陆都没问题,但是一展开选项就弹出错误提示框: 参数名:viewInfo 不能为空 (Microsoft SqlServer Ma ...
- 牛客暑假多校第二场J-farm
一.题意 White Rabbit has a rectangular farmland of n*m. In each of the grid there is a kind of plant. T ...
- C# WinForms跨线程更新 UI
与在Android中一样, 子线程中更新UI被认为是线程不安全的, 会抛出异常. 子线程返回UI线程中更新UI的一个方法为: 1, 捕获应用的UI线程的上下文; 2, 定义线程任务; 3, 定义线程任 ...
- TouTiao开源项目 分析笔记5
1.深入理解RxJava 1.1.基本上现在的APP都会有请求网络,然后处理回调的业务吧. 如果请求的数据很多,业务越来越复杂,怎么处理呢? 这里我用到了RxJava来帮我处理业务. RxJava主要 ...
- Androd安全——混淆技术完全解析
.前言 在上一篇Androd安全--反编译技术完全解析中介绍了反编译方面的知识,因此我们认识到为了安全我们需要对代码进行混淆. 混淆代码并不是让代码无法被反编译,而是将代码中的类.方法.变量等信息进行 ...
- JSP---JSTL核心标签库的使用
JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...
- error: unknown host service 的详细解决办法
问题情况描述: 有时候,你在cmd 窗口 adb shell 的时候,出现error: unknown host service. 问题解决办法: 这就要怪可恶的360手机助手了,你在任务管理器里面把 ...
- Centos7 grep命令简介
grep 是一个最初用于 Unix 操作系统的命令行工具.在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本. grep 可根据提供的 ...