【HDOJ2196】Computer(树的直径,树形DP)
2024-08-24 06:50:33
题意:给定一棵N个点树,询问这个树里面每个点到树上其他点的最大距离。
n<=10000
思路:设f[u,1],f[u,2]为以U为根向下的最长与次长,g[u,1],g[u,2]为从哪个儿子转移来
第一次dfs用V更新U,第二次dfs用U更新V,因为有V向U往上走的情况,这样做就可以处理了
可以发现这些数值中取最大值就是树的直径了
var f,g:array[..,..]of longint;
head,vet,next,len:array[..]of longint;
n,x,y,i,tot:longint; procedure add(a,b,c:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
len[tot]:=c;
head[a]:=tot;
end; procedure dfs(u,fa:longint);
var e,v,t:longint;
begin
e:=head[u];
while e<> do
begin
v:=vet[e];
if v<>fa then
begin
dfs(v,u);
t:=f[v,]+len[e];
if t>f[u,] then
begin
f[u,]:=f[u,]; g[u,]:=g[u,];
f[u,]:=t; g[u,]:=v;
end
else if t>f[u,] then
begin
f[u,]:=t; g[u,]:=v;
end;
end;
e:=next[e];
end;
end; procedure dfs2(u,fa:longint);
var e,v,t:longint;
begin
e:=head[u];
while e<> do
begin
v:=vet[e];
if v<>fa then
begin
t:=f[u,]+len[e];
if v=g[u,] then t:=f[u,]+len[e];
if t>f[v,] then
begin
f[v,]:=f[v,]; g[v,]:=g[v,];
f[v,]:=t; g[v,]:=u;
end
else if t>f[v,] then
begin
f[v,]:=t; g[v,]:=u;
end;
dfs2(v,u);
end;
e:=next[e];
end;
end; begin
assign(input,'2196.in'); reset(input);
assign(output,'2196.out'); rewrite(output);
while not eof do
begin
fillchar(head,sizeof(head),);
tot:=;
fillchar(f,sizeof(f),);
fillchar(g,sizeof(g),);
read(n);
if n= then break;
for i:= to n do
begin
read(x,y);
add(i,x,y);
add(x,i,y);
end;
dfs(,-);
dfs2(,-);
for i:= to n do writeln(f[i,]);
end;
close(input);
close(output);
end.
最新文章
- 条码固定资产管理PDA应用
- Linux 内核数据结构:双向链表
- struts 异常机制
- Linux 下找出超過某些容量的檔案
- anriod TabHost
- p ython笔记第一天
- ActiveX控件是什么?
- Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞
- HIbernate Oracle存储过程
- libusb-win32 在visual studio2008中成功编译回忆录
- 转:批处理for命令详解
- 解决PhpCms V9后台无法上传图片
- [ios2]Emoji表情符号兼容方案 【转】
- Making the Grade (bzoj1592)
- CentOS自带mysql配置(密码更改、端口开放访问、添加进系统启动项)
- 如何正确的升级node版本【已解决】
- sql server managerment 给表加说明
- Gitbash如何支持交互式命令?如何让gitbash的命令不乱码?winpty是什么鬼?干嘛用的?
- springmvc 拦截通配符 /** /
- IOC框架之 Unity 入门
热门文章
- checkbox点击选中,再点击取消,并显示在文本框中
- Bootstrap 下拉菜单(dropdown)插件
- python 爬取知乎图片
- centos7.4系统部署nodejs前端项目
- build_mem_type_table
- 关于stm32优先级大小的理解
- 计蒜客 The 2018 ACM-ICPC Chinese Collegiate Programming Contest Rolling The Polygon
- selenium2自动处理验证码
- 重新造轮子之静态链接2(Static linking)
- 将系统从.Net Core2.0升级到.Net Core2.1