AT_abc243_e [ABC243E] Edge Deletion 题解

首先,我们可以得出一个结论:

  • 令点 \(i,j\) 之间的最短路径边权和 \(dis_{i,j}\),若存在一个点 \(k\),使得 \(k \neq i\)\(k \neq j\)\(dis_{i,k}+dis_{k,j}=dis_{i,j}\),则连接 \(i,j\) 的边可以被删去。

该结论的正确性是显然的,因为将连接 \(i,j\) 的边删去后,\(i,j\) 之间的最短路径可以被 \(i,k + k,j\) 之间的最短路径所代替。

于是我们先使用 floyd 算法跑一遍最短路,求出 \(dis\) 数组;

然后枚举每条边,若该边满足上述结论,就令答案累加即可。

时间复杂度 \(O(n^3+m)\)

核心代码:

for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
if(j!=G[i].u&&j!=G[i].v&&dis[G[i].u][j]+dis[j][G[i].v]==dis[G[i].u][G[i].v]){
ans++; break;
}
posted @   _XOFqwq  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示