其他分享
首页 > 其他分享> > 模拟测试20191105

模拟测试20191105

作者:互联网

不要停下来啊

$T1:你相信引力吗$

看错数据范围导致打了nlog还因为数据出锅导致re我也是醉了

用一遍单调栈可以求出以一个点为右端点且右端点大于等于左端点的答案

同理可以求出以一个点为左端点且左端点大于右端点的答案

然后根据最大值和次大值的个数讨论去重就好了

 

$T2:停不下来的团长奥尔加$

设$f_{i}$表示$1$到$i$的答案

有$f_{i+1}=f_{i}+1+(f_{i}-f_{p_{i}})+1=2\times f_{i}-f_{p_{i}}+2$

 

$T3:Lesson5!$

我和题解思路不太一样

首先建出原点,通过拓扑排序找出最长路树

同时处理出来源点到每个点的最长路dis和每个点到终点的最长路rdis

考虑一条非树边$(i,j)$,他们对会对$j$到$lca(i,j)$之间的点产生$dis_{i}+rdis{j}+1$的贡献,(如下图橙色的点)

那么我们对所有非树边按照$dis_{i}+rdis{j}+1$从大到小排序,这样每个点只需要被更新一次

如何保证更新一次参考 模拟$96$ [城市游戏]

最后找到值最小且编号最小的点就行了

标签:一个点,测试,rdis,20191105,端点,非树边,最长,模拟,dis
来源: https://www.cnblogs.com/mikufun-hzoi-cpp/p/11803305.html