首先考虑一种暴力做法,为每条边拆成两条有向边,各建一个点.若某两条边有公共点,则在边所对应的点之间连一条边,权值为两条边中的较大值.这样跑最短路是$O(m^2\log m)$的. 用类似网络流中补流的方法,一条边拆成的两个点之间连权值为边的原权值的边(第一种边).对于一个点,将所有以它为起点的边排序,将相邻的两条边对应的点连边,小的往大的连权值为两条边的原权值差的边,大的往小的连权值为0的边(第二种边).建超级源汇,最短路即可. 若流了第一种边则代表最短路中有这条边,若流了第二种边则代表换边.复…