POJ 3255 Roadblocks

2022-08-05 14:30:20 字數 1031 閱讀 6308

求次短路問題,方法類似於求單源最短路,不過本題是將單源最短路和次最短路一塊求解

到某一點次最短路(eg:u): 假設最短路為s->v->u , 次短路為 s->v->u' 或 s->v'->u 注:s->v' 表示s->v 的次短路 ,v->u' 表示v->u 的次短路

需要做的就是同步更新單源最短路和次最短路

若當前節點為u,與u相鄰節點為v

1、若與u相鄰的節點v,通過u可以最小化s到其的距離,則更新其最短路,並記下原來s到v的最短路,以備更新次短路

2、 a、 若s通過u到v的路徑長度大於s到v的最小路徑長度,但是小於s到v的次短路長度,則更新s到v的次短路徑

b、 若是原來的最短路小於次短路,更新次短路

#include #include #include #define maxn 100010

#define inf 9999999999

using namespace std;

typedef pairp;

struct edge ;

int n,r;

vector g[maxn];

long long dist[maxn],dist2[maxn];

void solve()

if (dist2[e.to] > d2 && dist[e.to] >n>>r;

edge tmp,tmp1;

int from,to,cost;

for(int i=0;i>from>>to>>cost;

//cout

tmp.to = to-1;

tmp.cost =cost;

g[from-1].push_back(tmp);

tmp1.from = to-1;

tmp1.to = from -1;

tmp1.cost = cost;

g[to-1].push_back(tmp1);

}solve();

return 0;

}

poj3255Roadblocks

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

POJ3255 次短路

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