在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:1 2 1
2 3 2
1 3 3
1 3
103.071531641<=n<=2000
思路:一開始乖乖的打了個dijkstra記錄路徑然後慢慢求最後才發現好扯淡也就能過個樣例
正確做法是求出每個邊的權重然後直接暴力
注意因為有除法的存在所以大於號小於號可能和平常的dijkstra相反
0分**
1 #include2 #include3 #include4view codeusing
namespace
std;
5int map[3000][3000];6
double money=100;7
int dis[3000];8
int maxn=0x7fffff;9
int pass[3000
];10
int vis[3000
];11
intn,m;
12int ans[1001
];13
void print(int bg,int
ed)14
26 ans[now]=bg;
27int qq=ed;
28for(int i=2;i<=now;i++)
2932 printf("
%.8lf
",money);33}
34void dijkstra(int
p)35
42for(int i=1;i<=n;i++)
4353
}54 vis[k]=1;55
for(int j=1;j<=n;j++)
5662}63
}64}65
intmain()
6676
inta,b;
77 scanf("
%d%d
",&a,&b);
78dijkstra(b);
79print(b,a);
80return0;
81 }
ac**
1 #include2view code#define maxn 2001
3#define inf 99999
4using
namespace
std;
5int
n,m,a,b;
6double
m[maxn][maxn];
7int
main()
822 cin>>a>>b;
23 a--; b--;
24//
dijkstra
25double dis[maxn]; //
dis i:money needed to trans 100 to i
26bool
book[maxn];
27 book[b]=true;28
for (i=0;i)
2933
for (j=0;j)
3443 book[nmin]=true; //
record in book
44for (i=0;i)
45if (min/m[nmin][i]//
relax
46 dis[i]=min/m[nmin][i];47}
48 cout.precision(8
);49 cout<
50return0;
51 }
洛谷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,表...