原题链接:A118194.午枫的路线封闭
本题使用 Floyd 最短路解决。
FLOYD 算法
Floyd 算法是一种以类似动态规划的逻辑,使用数组 dis 存储最短路长度,具体流程为:考虑枚举一个中间点 kkk ,选择从起点到中间点的最短路长度 + 从中间点到终点的最短路长度之和的最小值作为最短路长度。形式化表达为,设 disi,jdis_{i,j}disi,j 为从 iii 到 jjj 的最短路长度,从 iii 到 jjj 的最短路转移方程就是 disi,j=mink=1ndisi,k+disk,jdis_{i,j} = \min _{k=1}^{n} dis_{i,k} + dis_{k,j}disi,j =mink=1n disi,k +disk,j 。
标准模板(片段):
其中 dis 为最短路长度数组,nnn 为点的数量。
本题思路
事实上,Floyd 可以处理动态加边问题,只需要重新枚举各个起点和终点以该边的起点或终点为中间点更新最短路即可。
但本题的操作 1 为删边。
所以我们不难想到倒着离线处理,把正着的删边当成倒着的加边,倒着处理询问,如果操作删除了一条边那就加上这条边处理之前的询问。
AC 代码:
感谢观看。
创作不易,希望给我一个点赞。