POJ 3255 次短路徑

2022-08-05 17:09:26 字數 1035 閱讀 5119

題意:給你無向帶權圖,求次短路徑

題解:加一個次短路的陣列,用於距記錄源點到此點的次短路長度,注意初始化是源點到自己的次短路是極大值

接著再使用dijkstra演算法,它是每次選用現在連上(記錄了)的點與其他點的最小權值的邊去更新其他所有的點

就是在dij的演算法上進行簡單的修改,需要修改的是每次最短路更新之後再更新次短路,但是保證更新的次短路大於記錄的次短路並小於記錄的最短路

#include#include

#include

#include

using

namespace

std;

const

int inf=1

<<29

;const

int maxn=200010

;struct

edge

bool

operator

< (const edge &c)const

//改寫大頂堆成為小頂堆

};vector

vec[maxn];

int dis[maxn],secondis[maxn];//

記錄第二短路徑

void init(intn)}

void dijkstrasecond(int n,int

s)

//secondis[s]=0;

//不能初始化

dis[s]=0

; pque.push(edge(s,

0));

while(!pque.empty())

if(secondis[ende.v]>disnow&&dis[ende.v]//

鬆弛次短路}}

}int

main()

dijkstrasecond(n,1);

//for(int i=1; i<=n; ++i)

// printf("

%d\n

",secondis[n]);

}return0;

}

POJ3255 次短路

求1到n的次短路,到某個頂點v的次短路有兩種可能,一是到其他某個頂點u的最短路 edge u v 二是到其他某個點u的次短路 edge u v 因此在鬆弛的時候不僅要記錄最短路,同時也要記錄次短路 include include include include include include inc...

POJ 3255 Roadblocks

求次短路問題,方法類似於求單源最短路,不過本題是將單源最短路和次最短路一塊求解 到某一點次最短路 eg u 假設最短路為s v u 次短路為 s v u 或 s v u 注 s v 表示s v 的次短路 ,v u 表示v u 的次短路 需要做的就是同步更新單源最短路和次最短路 若當前節點為u 與u相...

poj3255Roadblocks

題意 給你n個點和r個邊,求次短路。 思路 考慮一下次短路v的條件,第一種是到u的最短路 d u,v ,第二種是到u的次短路 d u,v 。 因此,只需要維護一下最短路和次短路就可以了, include include include include include include include ...