考虑到负权边,两点之间只有一条,故将双向边建图后,维护处连通块缩点,在建负权边,图为 D A G DAG DAG
在缩点图上跑拓扑排序,连通块内部跑 D i j k s t r a Dijkstra Dijkstra,就能维护处最短路 d [ i ] d[i] d[i]
巨坑细节: d [ i ] d[i] d[i]要初始化为 0 x 7 f 0x7f 0x7f,而当 d [ i ] > 0 x 3 f d[i]>0x3f d[i]>0x3f的时候就不能到达了,为什么不是 d [ i ] = = 0 x 7 f d[i]==0x7f d[i]==0x7f才不能到达呢?因为有可能一个点 d [ u ] = 0 x 7 f d[u]=0x7f d[u]=0x7f,此时有一条边权为负,就可以去更新 d [ v ] d[v] d[v],但 u u u点都不能到达, v v v点肯定不能到达!!!!!!!!!!!