网上似乎没多少单源次短路的学习,今天做了道例题,写一下做法
例题:P2829 大逃离 和 P2865 [USACO06NOV] Roadblocks G
以第一题为例:
- 我们只需要求出以 1 和 n 为源点各点的最短路,然后枚举每一条边(因为是双向的,所以把他拆成两个有向边)然后比较
和
的大小取最小值就行,但是需要注意,如果遇到 d
时要跳过,因为我们求的是次短路 (dis[1][x]表示以1为源点,到x的最短路,dis[2][y]表示以n为源点,到y的最短路,z是边的长度,ans是答案)
这题有一个特殊的地方,就是要处理每个点直接相连的点的个数,直接通过 hav[x][y]记录两个点是否有直接点相连,link[