码迷,mamicode.com
首页 > 其他好文 > 详细

CF379F New Year Tree

时间:2019-11-09 22:00:02      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:tree   最好   大于   dep   bfs   选择   长度   nbsp   计算   

题面:

新年里,程序猿们往往会做一些有趣的事情。你则选择以往这棵树上加节点来取乐。

一个添加节点的操作是这样的:

1) 找到树上的一个叶子结点v   2)设现在树上有n个节点,

那么你现在会加入两个节点n+1和n+2,它们都会成为n的儿子.你的任务是在做q次这样的操作,并在每做完一次后计算一次树的直径。

 

如果暴力的对于每次加一个点跑两边bfs就会炸掉

考虑加点带来的贡献比如现在L,R已经是直径的两个端点了,那么若新加的点与L,R的距离大于原来的L,R的距离了,则新加的点与L或R组成新的直径

为什么?

因为任意一点到直径两端点的距离是最远的,而有可能会产生新长度的只有加进来的两个点

所以只用求出点间的距离用lca即可,由于便全都为1所以直接询问深度即可

求两点间距离最好就是用dep[u]+dep[v]-2*dep[lca(x,y)]直接求lca即可

CF379F New Year Tree

标签:tree   最好   大于   dep   bfs   选择   长度   nbsp   计算   

原文地址:https://www.cnblogs.com/lkx422/p/11827695.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!