题意:给定一棵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.

最新文章

  1. 条码固定资产管理PDA应用
  2. Linux 内核数据结构:双向链表
  3. struts 异常机制
  4. Linux 下找出超過某些容量的檔案
  5. anriod TabHost
  6. p ython笔记第一天
  7. ActiveX控件是什么?
  8. Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞
  9. HIbernate Oracle存储过程
  10. libusb-win32 在visual studio2008中成功编译回忆录
  11. 转:批处理for命令详解
  12. 解决PhpCms V9后台无法上传图片
  13. [ios2]Emoji表情符号兼容方案 【转】
  14. Making the Grade (bzoj1592)
  15. CentOS自带mysql配置(密码更改、端口开放访问、添加进系统启动项)
  16. 如何正确的升级node版本【已解决】
  17. sql server managerment 给表加说明
  18. Gitbash如何支持交互式命令?如何让gitbash的命令不乱码?winpty是什么鬼?干嘛用的?
  19. springmvc 拦截通配符 /** /
  20. IOC框架之 Unity 入门

热门文章

  1. checkbox点击选中,再点击取消,并显示在文本框中
  2. Bootstrap 下拉菜单(dropdown)插件
  3. python 爬取知乎图片
  4. centos7.4系统部署nodejs前端项目
  5. build_mem_type_table
  6. 关于stm32优先级大小的理解
  7. 计蒜客 The 2018 ACM-ICPC Chinese Collegiate Programming Contest Rolling The Polygon
  8. selenium2自动处理验证码
  9. 重新造轮子之静态链接2(Static linking)
  10. 将系统从.Net Core2.0升级到.Net Core2.1