在 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
1≤n≤2000, m≤10^5
1≤n≤20
00,m
≤105
輸入樣例:
3 3
1 2 1
2 3 2
1 3 3
1 3
輸出樣例:
103.07153164
分析:我們假
設a最初
擁有a0
元,經過
k次轉賬
,記每次
轉賬的手
續費為c
i,wi
=100−c
i100
。我們假設a最初擁有a_0元,經過k次轉賬,記每次轉賬的手續費為c_i,w_i=\frac。
我們假設a最
初擁有a
0元,
經過k次
轉賬,記
每次轉賬
的手續費
為ci
,wi
=100
100−
ci
。 則 目標
為:a0
×(w1
w2..
.wk)
≥100,解
得a0≥
100w1w
2...
wk
。則目標為:a_0×(w_1w_2...w_k)≥100,解得a_0≥\frac。
則目標為:a
0×(
w1w
2..
.wk
)≥10
0,解得
a0≥
w1w
2..
.wk
100
。 因 此,
我們需要
計算出w
1w2.
..wk
的最大值
。因此,我們需要計算出w_1w_2...w_k的最大值。
因此,我們需
要計算出
w1w
2..
.wk
的最大值
。 以 wi
=100−c
i100為邊
權建圖,
跑一遍d
ijks
tra求
出從a到
b的最長
路w1w
2...
wk即可
。以w_i=\frac為邊權建圖,跑一遍dijkstra求出從a到b的最長路w_1w_2...w_k即可。
以wi=1
0010
0−ci
為邊
權建圖,
跑一遍d
ijks
tra求
出從a到
b的最長
路w1
w2.
..wk
即可。
**:
#include
#include
#include
#include
using
namespace std;
const
int n=
2010
;int n,m,s,t;
double g[n]
[n],dis[n]
;bool st[n]
;void
dijkstra()
}int
main()
cin>>s>>t;
dijkstra()
;printf
("%.8lf\n"
,100
/dis[t]);
return0;
}
洛谷P1576 最小花費
在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後b收到100元。輸入格式 第一行輸入兩個正整數n,m,分別表示總人數和可以互相轉賬的人的對數。以下m行每行輸入三個正整數x,y,z,表...
洛谷 P1576 最小花費
題目戳 題目描述 在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後b收到100元。輸入輸出格式 輸入格式 第一行輸入兩個正整數n,m,分別表示總人數和可以互相轉賬的人的對數。以下m行...
P1576 最小花費 洛谷
在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後b收到100元。輸入格式 第一行輸入兩個正整數n,m,分別表示總人數和可以互相轉賬的人的對數。以下m行每行輸入三個正整數x,y,z,表...