最小花費最短路

2022-05-08 01:45:08 字數 1476 閱讀 8231

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。

多組資料:每組資料描述如下:

輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t;起點s,終點t。

n和m為0時輸入結束。

輸出一行有兩個數, 最短距離及其花費。

3 2

1 2 5 6

2 3 4 5

1 30 0

9 11
對於 30%的資料:1對於100%的資料:1資料組數<=5,注意卡常;

分析:

本題顯然是一道最短路,但是注意在最短路的前提下在進行一次貪心,求出最小花費。

code:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

using

namespace

std;

8const

int m=1000005;9

const

int oo=1

<<30;10

intn,m,s,t;

11int

next[m],head[m],to[m],adj[m],val[m];

12int

dist[m],ans[m];

13struct

node

16}a[m];

17 priority_queue ,greater>q;

18int

tot;

19 inline int

get()

27return

res;28}

29void add(int u,int v,int w,int

p)37

void

dijkstra()

39 dist[s]=0

;40 ans[s]=0

;41 q.push((node));

42while (!q.empty()));50}

51}52return;53

}54intmain()

65 s=get(),t=get

();66

while (!q.empty()) q.pop();

67 memset(dist,0,sizeof

(dist));

68 memset(ans,0,sizeof

(ans));

69dijkstra();

70 cout<"

"72return0;

73 }

最短路 最小花費(spfa)

題目鏈結 在 n 個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後 b 收到 100 元。第一行輸入兩個正整數 n,m,分別表示總人數和可以互相轉賬的人的對數。以下m行每行輸入三個正整數...

最小花費問題 (最短路徑演算法)

在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後b收到100元。第一行輸入兩個正整數n,m,分別表示總人數和可以互相轉賬的人的對數。1 n 2000 以下m行每行輸入三個正整數x,y...

最小花費( 最短路Dijkstra或SPFA)

在 n 個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問 a 最少需要多少錢使得轉賬後 b 收到 100 元。輸入格式 第一行輸入兩個正整數 n,m,分別表示總人數和可以互相轉賬的人的對數。以下 m 行每行輸入三...