最小花費 變向求最長路

2022-05-31 13:39:10 字數 1060 閱讀 4140

題意:

在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要

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

看這張圖,根據上圖關係容易算出a的花費應該為100/(0.86*0.98)

換句話說,就是100/(路上的花費)

讓a最小就是讓花費最大

由此從a向c跑最長路。只不過原來花費相加,現在相乘。

但就算到了這裡,還是有幾點要格外小心。

ⅰ用迪傑拉斯特的話,定義結構體優先順序要注意。因為是最長路,所以要邊長大的先出來。

ⅱ鏈式前向星加邊時,邊權要轉化為小數。如果直接用整數求最長路是行不通的,因為大於1的數可以在兩個點間來回跑,而且會一直變大。

#include using

namespace

std;

const

int maxn=200008

;int

n,m,s,t;

struct

edged[maxn];

//鏈式前向星

struct

node

//為了優先佇列

}temp;

double

dis[maxn];

int head[maxn],cnt=1

;void add(int u,int v,double

w)//

加邊int

vis[maxn];

void dij(int s)//

迪傑特斯拉}}

return;}

intmain()

intq,w;

cin>>q>>w;

dij(q);

double ans=0

; ans=100*1.0/(dis[w]);

printf(

"%.8lf

",ans);

}

最小花費 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的時候,可以選擇從中間乙個站下車,然後買票再上車,所以乘客整個過程中至少會買兩張票。現...