我们发现,brute-force 的复杂度的优化瓶颈主要在建图上。
于是我们有一个巧妙的转化:
因为所有满足 \(L \le S,T \le R\) 的所有边 \((S,T)\) 的长度均为 \(C\)。
然后题目要求的是 \(1 \sim N\) 的最短路。
那么在边权相等的情况下,走到的点的编号一定越大越好。
于是在所有点对 \((S,T)\) 中,最优的一定是 \((L,R)\)。
所以我们在建图时,仅需连接边(此处和以下所说的“边”均指单向边) \((L,R)\) 即可。
但是如果当前处在 \(L \sim R\) 之间的点,怎么办?
其实可以对于 \(2 \sim N\) 中的每个点 \(i\),都向编号为 \(i-1\) 的点连一条边权为 \(0\) 的边(边权为 \(0\) 是为了边权之和保持不变)。
当目前处在 \(L \sim R\) 之间的点时,就可以通过若干边权为 \(0\) 的边回到 \(L\),再跳到 \(R\)。
通过这样的转化,我们成功将建图的复杂度优化到了 \(O(N+M)\),接着跑一遍 dijkstra 算法求出最短路即可。
总时间复杂度为 \(O(N+M+N \log N)\)。
标签:le,qual,题解,边权,nikkei2019,复杂度,sim From: https://www.cnblogs.com/XOF-0-0/p/18048937