OIBH杯第三次普及组模拟赛T2 最小花费
2017-01-15 19:55
218 查看
T2:
题解:
简单的一个spfa问
d764
题,直接套用
参考程序:
最小花费
题目描述
在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。输入格式
第一行输入两个用空格隔开的正整数n和m,分别表示总人数和可以互相转账的人的对数。以下m行每行输入三个用空格隔开的正整数x; y; z,表示标号为x的人和标号为y的人之间互相转账需要扣除z%的手续费(z < 100)。最后一行输入两个用空格隔开的正整数A和B。数据保证A与B之间可以直接或间接地转账。
输出格式
输出A使得B到账100元最少需要的总费用。精确到小数点后8位。样例输入
3 3 1 2 1 2 3 2 1 3 3 1 3
样例输出
103.07153164
题解:
简单的一个spfa问
d764
题,直接套用
参考程序:
var a:array[1..2000,0..2000]of longint; f:array[1..2000,1..2000]of longint; dis:array[1..2000]of real; data:array[1..200000]of longint; bz:array[1..2000]of boolean; x,y,t,n,m,i,j,l,r,t1,t2:longint; begin assign(input,'money.in');reset(input); assign(output,'money.out');rewrite(output); readln(n,m); fillchar(f,sizeof(f),100); for i:=1 to m do begin readln(x,y,t); inc(a[x,0]); a[x,a[x,0]]:=y; f[x,y]:=t; inc(a[y,0]); a[y,a[y,0]]:=x; f[y,x]:=t; end; readln(t1,t2); i:=t1; l:=0; r:=1; data[1]:=i; dis[i]:=100; while l<r do begin inc(l); t:=data[l]; for j:=1 to a[t,0] do if dis[t]*((100-f[t,a[t,j]])/100)>dis[a[t,j]] then begin dis[a[t,j]]:=dis[t]*((100-f[t,a[t,j]])/100); if bz[a[t,j]]=false then begin bz[a[t,j]]:=true; inc(r); data[r]:=a[t,j]; end; end; bz[t]:=false; end; writeln((100/dis[t2])*100:0:8); close(input);close(output); end.
相关文章推荐
- OIBH杯第三次普及组模拟赛T3 最大约数和
- 关于OIBH杯第三次模拟赛(普及组)Problem 4 : excel 电子表格 的福利
- 【普及模拟】最小步数(steps.pas)//2018.1.31
- 2017.1.13【初中部 】普及组模拟赛C组 money 最小花费 题解
- OIBH杯第三次普及组模拟赛T1 立体井字棋
- OIBH杯第三次普及组模拟赛T4 电子表格
- OIBH杯第三次模拟赛(普及组)Problem 3 : maxsum 最大约数和
- FZU 2197 最小花费 (模拟)
- 最小花费
- hdu2609-字符串最小表示法|模拟|二分+lcp-How many
- 5-50 畅通工程之局部最小花费问题 (35分)
- CCF-201503-5 最小花费
- 九度OJ 1020 最小长方形 (模拟)
- 天梯赛训练 畅通工程之局部最小花费问题(35 分)
- P1576 最小花费
- JZOJ__Day 3:【NOIP普及模拟】排序(sort)
- jzoj 1731. 【10.5NOIP普及模拟】sum(sum.pas/cpp)
- JZOJsenior2016.2017.04.08【NOIP 普及组】模拟赛C组 T2最小步数
- FOJ FZU 2197 最小花费【贪心】
- JZOJ__Day 10:【普及模拟】【USACO】iCow播放器