1. 程式人生 > >洛谷P1576 最小花費

洛谷P1576 最小花費

題目描述

在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

題解

這題是很裸的最短路好嗎,不要和我多說什麼,沒什麼可說的。
不過,貌似不能用SPFA吧(反正我不知道怎麼用SPFA做)
(我貌似加了個佇列優化,只是閒的,貌似不加也能過)

下來貼程式碼:

#include<bits/stdc++.h>
#define inf 1000000000
using namespace std;
struct edge{
    int to;
    double w;
};
typedef pair<double,int> pii;
int n,m;
int a,b;
vector<edge>
e[2001]; int in[2001]; double d[2001]; priority_queue<pii,vector<pii>,greater<pii> > q; void dijkstra(){ d[b]=100; q.push(make_pair(d[b],b)); while(!q.empty()){ pii t=q.top(); q.pop(); int k=t.second; if(in[k]){ continue; } in[k]=1
; for(int i=0;i<e[k].size();i++){ edge h=e[k][i]; if(d[k]/h.w<d[h.to]){ d[h.to]=d[k]/h.w; q.push(make_pair(d[h.to],h.to)); } } } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ d[i]=inf; } for(int i=1;i<=m;i++){ int x,y,l; scanf("%d %d %d",&x,&y,&l); edge t; t.to=y; t.w=1-l*0.01; e[x].push_back(t); t.to=x; e[y].push_back(t); } cin>>a>>b; dijkstra(); printf("%.8lf",d[a]); return 0; }

相關推薦

P1576 花費 dijkstar

bool sin int 輸出格式 break bar ons ace main P1576 最小花費 題目背景 題目描述 在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裏扣除百分之幾的手續費

P1576 花費

-s 正整數 描述 直接 oid ios org badge color P1576 最小花費 題目描述 在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裏扣除百分之幾的手續

P1576 花費

題目描述 在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額里扣除百分之幾的手續費,請問A最少需要多少錢使得轉賬後B收到100元。 輸入輸出格式 輸入格式: 第一行輸入兩個正整數n,m,分別表

——P1609 回文數

圖片 pac i++ 模擬 algorithm ring print 技術 ide 題目描述 回文數是從左向右讀和從右向左讀結果一樣的數字串。 例如:121、44 和3是回文數,175和36不是。 對於一個給定的N,請你尋找一個回文數P,滿足P>N。 滿足這樣

2764 路徑覆蓋問題

gpo oid form 長度 每一個 inpu dfs set 空格 問題描述: 給定有向圖G=(V,E)。設P 是G 的一個簡單路(頂點不相交)的集合。如果V 中每個頂點恰好在P 的一條路上,則稱P是G 的一個路徑覆蓋。P 中路徑可以從V 的任何一個頂點開始,長度也是

[P1730] 密度路徑

p s new tin ref continue pro 其他 min ans 類型:Floyd 傳送門:>Here< 題意:定義一條路徑密度 = 該路徑長度 / 邊數。給出一張$DAG$,現有$Q$次詢問,每次給出$X,Y$,問$X,Y$的最小密度路徑

P2085函式值

題目描述 有n個函式,分別為F1,F2,...,Fn。定義Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*)。給定這些Ai、Bi和Ci,請求出所有函式的所有函式值中最小的m個(如有重複的要輸出多個)。 輸入輸出格式 輸入格式:   輸入資料:第一行輸入兩個正整數n和

4234方差生成樹——LCT維護圖上資訊的應用

題目:luogu4234. 題目大意:給定一張無向圖,求這張無向圖最大邊和最小邊的最小權值差. 首先,我們明確一點,一棵最小生成樹上的最大邊一定最小,這一點很容易用kruskal的演算法流程來證明. 那麼我們就可以考慮一個暴力演算法,列舉一棵生成樹的最小邊,然後依照kruskal演算

P2085函式值題解

題目 首先我們先分析一下題目範圍,\(a,b,c\) 都是整數,因此我們可以得出它的函式值在\((0,+\infty )\)上是單調遞增的,,然後我們可以根據函式的性質,將每個函式設定一個當前指向位置,都從從小的自變數開始找,每次找到最小的函式,並將最小函式的當前指向位置+1,因為並不知道最小函式自變數+1

C++ P1576 花費

呃,用最短路dijkstra演算法,求一下。。。求。。求。。求一下 -0.0: x = 100 / dis  其中,x是我們要求的最小費用,然後。。。有腦袋的人已經想到了,求出dis最大就好了(別問

P1576 花費

錯誤: 第31行 maxd 型別為double,賦成int! 解法: 把消耗轉化為剩餘 , 運用最短路演算法dijstra來找一遍最長路 #include<iostream> #i

[luogu]P1576花費-短路裸題

題目背景 題目描述 在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額里扣除百分之幾的手續費,請問A最少需要多少錢使得轉賬後B收到100元。 輸入輸出格式 輸入格式: 第一行輸入兩個正整數n,m,分別表

P3381 費用大流

con def getch space CMF lcm dig gcd inf 費用流板子 還是一道板子題。。先練練手 #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define full(a, b) mems

1361】 M的作物(割)

ini main 每一個 題目 lse 貢獻 sum 代碼 mem 傳送門 洛谷 Solution 這是一個比較實用的套路,很多題目都有用,而且這個套路難以口胡出來。 考慮把每一個附加貢獻重新建一個點,然後向必需的點連邊,流量為val。 然後直接種植的從源點向這個點連,流量

OJ 1373 a和uim之大逃離 DP

方法 blog brush cnblogs 計算 memset end namespace cpp https://www.luogu.org/problem/show?pid=1373 題意:n*m地圖,n,m<=800,起點,終點任意,兩個人每次輪流取出點中的數並

P1125 笨猴(NOIp2008提高組T1)

end ans 小寫字母 else 代碼 整數 turn clas efi 題目描述 笨小猴的詞匯量很小,所以每次做英語選擇題的時候都很頭疼。但是他找到了一種方法,經試驗證明,用這種方法去選擇選項的時候選對的幾率非常大! 這種方法的具體描述如下:假設maxn是單詞中出現次數

[1681]大正方形II

cst 邊界 思路 方程 ffffff style urn git 擴展 思路:對於矩陣中的每一個元素,處理出它能擴展到的上邊界$up$、左邊界$left$,DP得出以該元素為右下角的最大正方形。狀態轉移方程:$f_{i,j}=min(f_{i-1,j-1},up_{i,j

P1144 短路計數

-- 多少 pop fine www pty class 接下來 輸出格式 題目描述 給出一個N個頂點M條邊的無向無權圖,頂點編號為1~N。問從頂點1開始,到其他每個點的最短路有幾條。 輸入輸出格式 輸入格式: 輸入第一行包含2個正整數N,M,為圖的頂點數與邊

—— P2647 大收益

clas 我們 con fin problem 輸入 輸出格式 target .org https://www.luogu.org/problem/show?pid=2647 題目描述 現在你面前有n個物品,編號分別為1,2,3,……,n。你

P1387 大正方形 題解

turn 個數 lin 簡便 font while pan show 一個 此文為博主原創題解,轉載時請通知博主,並把原文鏈接放在正文醒目位置。 題目鏈接:https://www.luogu.org/problem/show?pid=1387 題目描述 在