最小花費(三種方式)

2021-10-10 04:06:20 字數 1955 閱讀 9357

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

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

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

輸入格式

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

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

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

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

輸出格式

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

精確到小數點後 8 位。

資料範圍

1≤n≤20001≤n≤2000,

m≤105m≤105

輸入樣例:

3 31 2 1

2 3 2

1 3 3

1 3輸出樣例:

103.07153164

//鄰接矩陣

#include

using

namespace std;

const

int n =

2010

;int n, m, s, t;

double g[n]

[n];

double dist[n]

;bool st[n]

;void

spfa()

}}}}

intmain()

cin >> s >> t;

spfa()

;printf

("%.8lf\n"

,100

/ dist[t]);

return0;

}

//鄰接表

#include

using

namespace std;

const

int n =

2010

,m=200010

;int n, m, s, t;

int h[n]

, e[m]

, ne[m]

, idx;

double dist[n]

,w[m]

;bool st[n]

;void

add(

int a,

int b,

double c)

void

spfa()

}}}}

intmain()

cin >> s >> t;

spfa()

;printf

("%.8lf\n"

,100

/ dist[t]);

return0;

}

// dijkstra

#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;

}

最小花費 Dijkstra

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

砍樹最小花費

題意 有n種樹,每種樹給出高度h,砍掉每顆樹的花費c,每種樹的數量p,現在要砍掉一些樹,使得最高的樹的數量超過所有樹的一半,問最小花費。不同種類的樹高度可能相同 題解 列舉不同的高度,把高於它的樹都砍掉,然後比它矮的樹挑便宜的砍,使得該高度的樹佔所有樹的1 2 1。給樹按高度排序,首先可以用字尾和預...

題目1086 最小花費

題目描述 在某條線路上有n個火車站,有三種距離的路程,l1,l2,l3,對應的 為c1,c2,c3.其對應關係如下 距離s 票價 0l1l2輸入保證0每兩個站之間的距離不超過l3。當乘客要移動的兩個站的距離大於l3的時候,可以選擇從中間乙個站下車,然後買票再上車,所以乘客整個過程中至少會買兩張票。現...