CF938D题解

题面

Description:
给定一个 n(1n2×105) 个点的无向图 G 和数组 a,对于每个 i(1in),求出 minj=1n(2×dis(i,j)+aj)


因为题目把所有路径长度乘了个 2,所以下文的讲述中默认将边权 ×2
如果我只做一个点,那显然直接跑最短路算法即可。
但是我有 n 个点,显然不能一个一个做所以考虑建立一个超级源点,指向每一个点,边权为 ai。这样我们就顺带搞定了最后加上 ai 这个要求。
因为路是双向的,所以从 ij 可以转化为从 ji,这样我们可以发现取点对 (i,j) 其实就是从超级源点走到 j 然后从 j 走到 i。那就是从超级源点走到 i。这样我们就证明了 2dis(i,j)+aj=dis(0,j)+dis(j,i)=dis(0,i)。这样,我们就把问题转化为了从超级源点走到 i 的最短路问题。于是这个题就做完了。

代码

posted @   1358id  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示