题目背景

题目描述

在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。

输入输出格式

输入格式:

第一行输入两个正整数n,m,分别表示总人数和可以互相转账的人的对数。

以下m行每行输入三个正整数x,y,z,表示标号为x的人和标号为y的人之间互相转账需要扣除z%的手续费 (z<100)。

最后一行输入两个正整数A,B。数据保证A与B之间可以直接或间接地转账。

输出格式:

输出A使得B到账100元最少需要的总费用。精确到小数点后8位。

输入输出样例

输入样例#1:

  1. 3 3
  2. 1 2 1
  3. 2 3 2
  4. 1 3 3
  5. 1 3
输出样例#1:

  1. 103.07153164

说明

1<=n<=2000

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. double a[][],dis[]={},minn;
  4. int n,m,i,j,k,x,y,f[]={};
  5. void init () //定义该函数以处理录入数据
  6. {
  7. cin>>n/*总人数*/>>m/*可以相互转账的人的对数*/;
  8. for(i=;i<=m;i++)
  9. {
  10. scanf("%d%d",&j,&k);/*录入可以相互转账的两人的序号*/
  11. scanf("%lf",&a[j][k]);/*将这两人的手续费转存入该数组中*/
  12. a[j][k]=(-a[j][k])/;/*改变手续费的形式(即,将原来的扣除百分比 转换 为剩余百分比)*/
  13. a[k][j]=a[j][k];/*a传给b的手续费等于b传给a的手续费*/
  14. }
  15. cin>>x>>y;/*输入要求计算的两人*/
  16. }
  17. void dijkstra(int x)/*定义该函数以确定最小的手续费*/
  18. {
  19. for(i=;i<=n;i++)/*该循环用以将手续费重新赋值给dis数组,f机制用于判断是否以确定出最小值*/
  20. {
  21. dis[i]=a[x][i];/*赋值*/
  22. dis[x]=;/*x转账给x的手续费为1(即没有手续费)*/
  23. f[x]=;/*x以被确定为本轮中必须要走的最小中转点*/
  24. }
  25. for(i=;i<=n-;i++)/*该循环用以重新定义从a点转账到b点的手续费*/
  26. {
  27. minn=;/*剩余最少为0*/
  28. for(j=;j<=n;j++)/*该循环用以穷举*/
  29. {
  30. if(f[j]==&&dis[j]>minn)/*如果j点并未被确定,并且x转账到j点所能余留的存款最多*/
  31. {
  32. k=j;/*将j点赋值给k点*/
  33. minn=dis[j];/*minn用以记录x到j点所需的"最小“手续费,类似于广搜*/
  34. }
  35. }
  36. f[k]=;/*声明k点被确定*/
  37. if(k==y)
  38. {
  39. break;
  40. }
  41. for(j=;j<=n;j++)
  42. {
  43. if(f[j]==&&dis[k]*a[k][j]>dis[j])/*如果j点没被确定并且x到k点再到j点的所能余留下的存款比x直接转给j点要多*/
  44. {
  45. dis[j]=dis[k]*a[k][j];/*重新定义x到j点的最小手续费*/
  46. }
  47. }
  48. }
  49. }
  50. int main()
  51. {
  52. init();
  53. dijkstra(x);
  54. printf("%0.8lf",/dis[y]);
  55. return ;
  56. }

Luogu P1576 最小花费的更多相关文章

  1. 洛谷—— P1576 最小花费

    P1576 最小花费 题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使 ...

  2. 洛谷P1576||最小花费||dijkstra||双向建边!!

    题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元. 数据范 ...

  3. 洛谷 P1576 最小花费

    题目戳 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元. ...

  4. P1576 最小花费 洛谷

    https://www.luogu.org/problem/show?pid=1576 题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间 ...

  5. 洛谷P1576 最小花费x

    题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元 ...

  6. P1576 最小花费

    题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元 ...

  7. 浅谈SPFA——洛谷P1576 最小花费 题解

    想找原题请点击这里:传送门 原题: 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少 ...

  8. 把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend

    //把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend //dp[i][j]:把第i个数转成第j小的数,最小花费 //此题与po ...

  9. 把一个序列转换成非严格递增序列的最小花费 POJ 3666

    //把一个序列转换成非严格递增序列的最小花费 POJ 3666 //dp[i][j]:把第i个数转成第j小的数,最小花费 #include <iostream> #include < ...

随机推荐

  1. jq与原生js实现收起展开效果

    jq与原生js实现收起展开效果 (jq需自己加载) <!DOCTYPE html> <html> <head> <meta charset="UTF ...

  2. DOCKER 从入门到放弃(二)

    搜索镜像 从docker官方镜像仓库搜索镜像 docker search [OPTIONS] TERM OPTIONS: --automated :只显示自动创建的镜像,默认值为fasle --fil ...

  3. CSS 实现流布局以及多列混合布局

    基本流布局 <!DOCTYPE html > <html> <head> <meta charset="utf-8"> <ti ...

  4. Git恢复指定文件

    Git恢复指定文件 修改这个文件的commit有哪些? git log -- <文件路径> 猜测需要还原的commit. 这个文件作了哪些更改? git diff <需要还原的com ...

  5. Vijos 1010 清帝之惑之乾隆

    背景 乾隆,雍正的第四子,在位60年,退位后又当了三年太上皇,终年89岁. 乾隆即位之初,实行宽猛互济的政策,务实足国,重视农桑,停止捐纳,平定叛乱等一系列活动中,充分体现了他的文治武功,乾隆帝向慕风 ...

  6. 使用matplotlib快速绘图

    matplotlib的pyplot子库提供了和matlab类似的绘图API,方便用户快速绘制2D图表.让我们先来看一个简单的例子: # -*- coding: utf-8 -*- import num ...

  7. VB6之ICMP实现ping功能

    代码备忘 'code by lichmama from cnblogs.com Private Type IPAddr ip1 As Byte ip2 As Byte ip3 As Byte ip4 ...

  8. ReadAndWriteBinaryFile

    package JBJADV003;import java.io.FileInputStream;import java.io.DataInputStream;import java.io.EOFEx ...

  9. oracle linux 7.3 下用dtrace 跟踪 mysql-community-server-5.6.20

    第一部分:oracle linux 7.3 dtrace 安装: http://public-yum.oracle.com/   内核升极到 [root@server1 SPECS]# uname - ...

  10. FineReport中如何对cpt模板加密

    1. 描述 FR客户使用FineReport报表并将其集成到自己的产品中,然后提供给最终用户使用,最终用户可以预览FR模板,但是不能打开模板进行设计修改. FineReport提供了cpt模板Des加 ...