不要停下來啊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$ [城市遊戲]
最後找到值最小且編號最小的點就好了