当前位置: 代码迷 >> 综合 >> Educational Codeforces Round 48 (Rated for Div. 2) F Road Projects
  详细解决方案

Educational Codeforces Round 48 (Rated for Div. 2) F Road Projects

热度:50   发布时间:2023-12-15 07:37:03.0

想到了把1~n的链拉出来,但是再往下就想不走了。经常把题目搞混,明明是要最大化最短路,我老想着最短化最短路,,反正各种扯,我们来慢慢扯这道题。

首先如果链上某个节点有超过1个非链上的“子”节点,那么直接在这至少两个的“子”节点上连边,最短路不变,这已经是最优的答案了。所以我们只需要考虑,每个链上的节点(除了1,n)至多有1个非链“子” 节点的情况,分了三种。(建议画图理解)

第一种是在链上连两个点,这两个点中间隔了一个点(题目说不能连在已经直接相连的两个点之间),这样能最大化最短路,这种情况只需要找出链上相邻的两条边的最大值就好了

第二种是一个“子”节点连一个链上节点,“子”节点的父亲和该链上节点一定相邻(为了最大化最短路),并且该链上节点一定没有“子”节点(写的时候不用考虑这个,我只是提一下)这个也只要预处理出来就好了。

第三种是两个“子”节点相连,他们的父亲在链上也是相邻的吗?应该不是的,假设他们到父亲的距离分别为l1,l2,父亲之间的距离是l3要加的边是l,就是要最小化 l+l1+l2-l3,也就是要预处理最小化 l1+l2-l3,这个从左往右扫一遍就可以了(记录最小值,遇到一个点先更新答案,往右移动的时候减一个距离,再跟当前点比较)

然后每个询问是O(1)的。。。真**恐怖。

代码没写,嘴巴选手(雾

  相关解决方案