洛谷 P1576 最小花費

2022-03-04 22:30:53 字數 1414 閱讀 9243

題目戳

題目描述

在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後b收到100元。

輸入輸出格式

輸入格式:

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

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

最後一行輸入兩個正整數a,b。資料保證a與b之間可以直接或間接地轉賬。

輸出格式:

輸出a使得b到賬100元最少需要的總費用。精確到小數點後8位。

輸入輸出樣例

輸入樣例#1:

3 3                                     

1 2 1

2 3 2

1 3 3

1 3

輸出樣例#1:

103.07153164

說明1<=n<=2000

很容易由匯率的轉換聯想到最短路,起點和起點本身的匯率顯然為1,而其他的有邊關係的兩個點的匯率顯然為(1-w)%,因為要求最少要準備多少錢,那麼我們就要使起點和終點的匯率最大,這樣能保證100/匯率 所得值最小。so,我們直接建邊並套上spfa模板,對於三角不等式,將其變為:dis[v]=max(dis[v],dis[u]*w)

1 #include2

using

namespace

std;

3#define ll long long

4#define il inline

5#define inf 233333333

6 queueq;

7int n,m,a,b,h[2005

],cnt;

8double dis[2005],pre[2005];9

bool vis[2005

];10

struct

edgee[200050

];14 il void add(int u,int v,double

w)15

18 il void spfa(int

s)1935}

36}37}

38int

main()

3947 scanf("

%d%d

",&a,&b);

48spfa(a);

49 printf("

%.8lf

",100/dis[b]);

50return0;

51 }

洛谷P1576 最小花費

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

P1576 最小花費 洛谷

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

洛谷P1576 最小花費

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