标签:个数 最大值 大值 Nikita dfs game 直径 CF842E
https://www.luogu.com.cn/problem/CF842E
考虑树的直径有性质:当存在多条直径,若长度为偶数,则它们交于一点,且为直径中点;若长度为奇数,则交于中间那条边。
于是记录下直径的中点(或中间那条边),同时对每个点维护到中点的距离
那么查询的时候,答案就是这个距离的最大值个数。
要是中间是边的情况,就对两个端点分别记录,拿最大值个数和次大值个数乘一乘大概就行。
或者你再把每条边变成一个虚点。
然后加叶子,对于加的这个叶子的父亲,看一下是不是当前的最大值或次大值,根据当前直径长度的奇偶性讨论,要移动到旁边的点/边上。
移动完信息的变更发现是先把某子树内的距离都减一,再把剩下部分都加一。
然后这个东西dfs+线段树就完了,离线下把整个树建好搞 dfs 序,每次加叶子变成激活一个节点,而未激活的节点不允许标记推上去
标签:个数,最大值,大值,Nikita,dfs,game,直径,CF842E 来源: https://www.cnblogs.com/suxxsfe/p/15244323.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。