bellman ford 有邊數限制的最短路

2021-10-06 05:56:25 字數 2500 閱讀 5944

題目入口

題意:給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環邊權可能為負數

請你求出從1號點到n號點的最多經過k條邊的最短距離,如果無法從1號點走到n號點,輸出impossible。

注意:圖中可能存在負權迴路

輸入格式

第一行包含三個整數n,m,k。

接下來m行,每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。

輸出格式

輸出乙個整數,表示從1號點到n號點的最多經過k條邊的最短距離。

如果不存在滿足條件的路徑,則輸出「impossible」。

資料範圍

1≤n,k≤500,

1≤m≤10000,

任意邊長的絕對值不超過10000。

輸入樣例:

3 3 1

1 2 1

2 3 1

1 3 3

輸出樣例:

3思路

原理:和dijkstra的原理有些相似。

用bellman-ford判斷負環:

**實現:o(nm)

#

include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define

lowbit

(x)(x &

(-x))#

define

me(ar)

memset

(ar,0,

sizeof ar)

#define

mem(ar,num)

memset

(ar, num,

sizeof ar)

#define

rp(i, n)

for(

int i =

0, i < n; i ++)#

define

rep(i, a, n)

for(

int i = a; i <= n; i ++)#

define

pre(i, n, a)

for(

int i = n; i >= a; i --)#

define

iosios::

sync_with_stdio(0

); cin.

tie(0)

;cout.

tie(0)

;const

int way[4]

[2]=

,,,}

;using

namespace std;

typedef

long

long ll;

typedef pair pll;

const

int inf =

0x3f3f3f3f3f3f3f3f

;const

double pi =

acos(-

1.0)

;const

double exp =

1e-8

;const ll mod =

1e9+7;

const

int n =

505, m =

1e5+5;

int n, m, k;

int dist[n]

, backup[n]

;struct

node

edges[m]

;int

bellman_ford()

}//可能存在負權邊,所以距離可能不再等於0x3f了

if(dist[n]

>

0x3f3f3f3f/2

)return-1

;return dist[n];}

signed

main()

;}int ans =

bellman_ford()

;if(ans ==-1

)puts

("impossible");

else cout << ans << endl;

return0;

}

bellman ford 有邊數限制的最短路

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你求出從1號點到n號點的最多經過k條邊的最短距離,如果無法從1號點走到n號點,輸出impossible。給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你求出從1號點到n號點的最多經過k條邊的最短距離,如...

有邊數限制的最短路(bellman ford演算法)

題目鏈結 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你求出從1號點到n號點的最多經過k條邊的最短距離,如果無法從1號點走到n號點,輸出impossible。注意 圖中可能 存在負權迴路 輸入格式 第一行包含三個整數n,m,k。接下來m行,每行包含三個整數x,y,z,表示...

Bellman ford 有邊數限制的最短路

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你求出從1號點到n號點的最多經過k條邊的最短距離,如果無法從1號點走到n號點,輸出impossible。注意 圖中可能 存在負權迴路 include using namespace std const int n 505,m 1...