[PKUSC2018]星际穿越 乱做
感觉完全没有思维能力了啊 QAQ,断断续续想了好久,记录一下心路历程吧。这个思路好像不是很好的样子,建议找题解的同学移步题解区。
一开始读错题了,胡了个离线询问 + 线段树操作的假做法。
后来打算开始写之前明确细节的时候发现寄了,重新读题之后,第一想法肯定是找一下这个图有什么性质。
首先我们肯定好奇 \(u\rightarrow v\) 的最短路长成什么样子。肯定先猜只会向左对吧,然后随便构一下就发现这是不对的,有的时候我们先向右到一个大中转点再向左走会更好。
然后就猜每条最短路里这个中转点只会有一个,也就是说,\(u\rightarrow w\rightarrow v(w>u>v)\)。
我们不妨记 \(w\) 是 \(u\rightarrow v\) 路上的最右点。我们现在想证明一定是先一路右走,再一路左走。这个确实是可以证的,但是我不想码那么多字。
我们现在明确了这个最短路上点的范围,接下来还想知道这个最短路具体是怎么走的。
我们考虑一个 \(u\rightarrow v\) 并且只能向左走,容易发现不超过 \(x\) 步就能到达的点形成一个区间。这个和国旗计划很像,我们考虑把倍增作为解法备选项。现在,只要我们确定最右点 \(w\),我们就有了一个解法了。
那么,这个最右点 \(w\) 随着 \(u\) 或者 \(v\) 变化是怎么变化的呢?我首先猜了一手单调性,证了一下发现可能是对的。但是目前手头的性质仍然不够我们给出一个很好的算法。
我猜测这个 \(w\) 不会很多。
这个时候 云浅知处 又过来嘲讽了我还恶意给我透露做法 😡。我没太听清。
就当刚刚什么都没发生,我们猜一手对于同一个 \(u\) 除了 \(u\) 本身以外,这个 \(w\) 就一个。
这个也是可以证的,我们设出 \(u,v,w\),再让 \(v\) 左移一步得到 \(v'\),根据单调性有 \(w\) 不减,我们再证它不增就可以了。还是不想写。
然后我们就知道这个 \(w\) 只有一个,考虑把在 \(u\) 上的询问直接丢到 \(w\) 上再加一个修正量就转化成了只会往左走的一个题。
我们刚刚说过这个东西是可以倍增做的。我又想了好久细节,然后写了一波,小调一会就过了。
上面所有说的懒得写的证明过程大都是类似的,就是反证得到一条更短的最短路得出矛盾。留作思考题。
个人觉得在被恶意透露做法之前大部分性质还是差不多发现了的,思路还是很连贯的,但问题出在 读错题、思考速度很慢、很多性质不能一眼猜出来(最后得到的性质好像有人一眼看出来)、写得很慢。
破防了,摆烂吧。