不要停下来啊spa
看错数据范围致使打了nlog还由于数据出锅致使re我也是醉了3d
用一遍单调栈能够求出以一个点为右端点且右端点大于等于左端点的答案blog
同理能够求出以一个点为左端点且左端点大于右端点的答案排序
而后根据最大值和次大值的个数讨论去重就行了游戏
设$f_{i}$表示$1$到$i$的答案io
有$f_{i+1}=f_{i}+1+(f_{i}-f_{p_{i}})+1=2\times f_{i}-f_{p_{i}}+2$sso
我和题解思路不太同样im
首先建出原点,经过拓扑排序找出最长路树数据
同时处理出来源点到每一个点的最长路dis和每一个点到终点的最长路rdisimg
考虑一条非树边$(i,j)$,他们对会对$j$到$lca(i,j)$之间的点产生$dis_{i}+rdis{j}+1$的贡献,(以下图橙色的点)
那么咱们对全部非树边按照$dis_{i}+rdis{j}+1$从大到小排序,这样每一个点只须要被更新一次
如何保证更新一次参考 模拟$96$ [城市游戏]
最后找到值最小且编号最小的点就好了