对于任意传送门集合,无论从哪个门开始遍历最小时间均相同,那么以传送门之间的最短路为边跑最小生成树,再加上 \(1\) 号点到最近传送门即为所求。

将原图的每条边 \((u,v)\) 替换为分别距离 \(u,v\) 最近的两个传送门 \(U,V\) 作为端点,权值为 \(dis(U,u)+w_{u,v}+dis(v,V)\) 的新边,这部分可以用多起点最短路的 Dijkstra 解决。考虑这个做法的正确性。

CF196E Opening Portals_最短路

假设方案为黑色路径加红色路径,黑色路径上的原边没有任意一条对应到黑色路径。

黑色路径上以 \(a\) 为一个端点的那条边对应到了绿色路径,以 \(b\) 为一个端点的那条边对应到了蓝色路径。

将黑色路径替换为绿色路径,在同样保证联通的情况下,答案不会变劣。

这样边数就降到了 \(m\),完全可以接受。