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

2021-10-22 10:12:24 字數 1658 閱讀 8870

在 n 個人中,某些人的銀行賬號之間可以互相轉賬。

這些人之間轉賬的手續費各不相同。

給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問 a 最少需要多少錢使得轉賬後 b 收到 100 元。

輸入格式

第一行輸入兩個正整數 n,m,分別表示總人數和可以互相轉賬的人的對數。

以下 m 行每行輸入三個正整數 x,y,z,表示標號為 x 的人和標號為 y 的人之間互相轉賬需要扣除 z% 的手續費 ( z<

100)。

最後一行輸入兩個正整數 a,b。

資料保證 a 與 b 之間可以直接或間接地轉賬。

輸出格式

輸出 a 使得 b 到賬 100 元最少需要的總費用。

精確到小數點後 8 位。

資料範圍

1≤n≤2000

,m≤105

輸入樣例:33

1212

3213

313輸出樣例:

103.07153164

money*x=

100 money=

100/x

要求money最小,那麼x最大即可

#include

#include

#include

#include

using

namespace std;

const

int n =

2010

;int n, m, s, t;

double g[n]

[n];

double dist[n]

;bool st[n]

;void

dijkstra()

}int

main()

cin >> s >> t;

dijkstra()

;printf

("%.8lf\n"

,100

/ dist[t]);

return0;

}

//spfa

#include

#include

#include

#include

using

namespace std;

const

int n =

2010

,m =

100000*2

+10;int n, m, s, t;

int h[n]

, e[m]

, ne[m]

, idx;

double w[m]

, dist[n]

;bool st[n]

;int q[n]

;void

add(

int a ,

int b ,

double c)

void

spfa()

}}}}

intmain()

cin >> s >> t;

spfa()

;printf

("%.8lf\n"

,100

/ dist[t]);

return0;

}

最小花費最短路

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。多組資料 每組資料描述如下 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一...

最短路 最小花費(spfa)

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

最小花費 Dijkstra

原題鏈結傳送門 d es crip tion description descri ptio n在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後b收到100元。i np ut inp...