题目描述

在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,m<=100000

分析
题意很好理解就是很常见的题目方法有很多,最近几天和STL有不解之缘于是又写了STL大法QwQ;
主要的问题还是精度的问题,还有就是手续费改收益率的方法注意连双向边;
代码如下;比较基础就不讲解了;
#include<bits/stdc++.h>
#define N 2005
#define M 100005
#define INF 1e8
using namespace std;
struct edge{int Next,vet;double val;
}g[M<<1];
int tot,head[N];
void add(int x,int y,double z){tot++;g[tot]=((edge){head[x],y,z});head[x]=tot;
}
int n,m,s,t;
struct node{double d;int u;bool operator <(const node &rhs)const{return d>rhs.d;}
};
double d[N];
void Dijkstra(int s){priority_queue <node> q;for(int i=1;i<=n;i++)d[i]=INF;d[s]=100;q.push((node){100,s});while(!q.empty()){node x=q.top();q.pop();int u=x.u;if(d[u]!=x.d)continue;for(int i=head[u];i;i=g[i].Next){int v=g[i].vet;if(d[v]>d[u]/g[i].val){d[v]=d[u]/g[i].val;q.push((node){d[v],v});}}}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);double q=1-(double)c/100;add(a,b,q);add(b,a,q);}scanf("%d%d",&s,&t);Dijkstra(s);printf("%.8lf",d[t]);return 0;
}

luoguP1576 最小花费相关推荐

  1. hdu4122 制作月饼完成订单的最小花费

    题意:       有一个加工厂加工月饼的,这个工厂一共开业m小时,2000年1月1日0点是开业的第一个小时,每个小时加工月饼的价钱也不一样,然后每个月饼的保质期都是t天,因为要放在冰箱里保存,所以在 ...

  2. ZOJ3715 竞选班长求最小花费

    题意:       有n个小朋友竞选班长,一号想当班长,每个人都必须选择一个人当班长,并且不可以选择自己,并且每个人都有一个权值ai,这个权值就是如果1想让这个人改变主意选择自己当班长就得给他ai个糖 ...

  3. LeetCode-动态规划基础题-746. 使用最小花费爬楼梯

    描述 746.使用最小花费爬楼梯 数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始). 每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应 ...

  4. 1230: 最小花费(spfa)

    1230: 最小花费 时间限制: 1 Sec 内存限制: 128 MB 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除 ...

  5. LeetCode Algorithm 746. 使用最小花费爬楼梯

    746. 使用最小花费爬楼梯 Ideas 首先确定题目类型,爬楼梯问题,并且给定了状态转移的限制,其实就已经可以确定状态转移方程了. 然后题目说可以从下标为0或下标为1的台阶开始爬,所以我们可以定义两 ...

  6. 【例4-4】最小花费

    [例4-4]最小花费 链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1344 时间限制: 1000 ms         内存限制: 65536 ...

  7. 算法题目——使用最小花费爬楼梯(动态规划)

    题目链接:746.使用最小花费爬楼梯 方法:动态规划 假设数组cost的长度为n,则n个阶梯分别对应下标0到n- 1,楼层顶部对应下标n,问题等价于计算达到下标n的最小花费.可以通过动态规划求解. 创 ...

  8. 【最短路】【Dijkstra】【图论】最小花费(jzoj 2125)

    最小花费 题目大意: n个人,一些人之间可以相互转账,但又手续费x%,问A转给B100元至少要多少钱 样例输入 3 3 1 2 1 2 3 2 1 3 3 1 3 样例输出 103.07153164 ...

  9. 【图论】【最短路】【Dijkstra】最小花费(ssl 2206/luogu 1576)

    最小花费 ssl 2206 luogu 1576 题目大意: 有n个人,他们之间有m对人可以相互{\color{red}相互}相互转账,但要收一定的税,求第x个人转给第y个人至少要多少钱 Descri ...

最新文章

  1. 图片过渡效果一例 使用bitmapData操作
  2. g++ 安装python_mac编译安装faiss
  3. Web应用扫描测试工具Vega
  4. C# DateTime 日期加1天 减一天 加一月 减一月 等方法(转)
  5. phpstrom php出现404
  6. 暂无,进程那篇深度不够
  7. JavaScript产生一个n到m之间的随机数
  8. 杂牌手柄模拟xboxone手柄_手机就能玩Switch游戏,蛋蛋模拟器+盖世小鸡X2手柄体验...
  9. Qt文档阅读笔记-Qt Quick Examples - Text 初步解析
  10. Flutter Fish-Redux插件入门指南
  11. Win10 系统字体美化
  12. C语言根号作用,c语言中如何开根号运算
  13. 实现闲鱼自动化脚本-方案对比分析
  14. win10 yolov5 tensorRT 部署
  15. 批量修改文件夹或文件名称
  16. Win10怎么通过ip添加网络打印机?
  17. 飞机订票管理系统C语言课程设计
  18. Android中使用ToggleButton(开关按钮)按钮实现的灯泡开关效果
  19. js ajax上传文件功能
  20. MapInfo版本选择与使用

热门文章

  1. 1028 人口普查(C++实现)
  2. 国际贸易基础(五)报价
  3. Unity打包AB资源(傻瓜式)
  4. 计算机教室条幅文字,高中教室横幅标语大全
  5. (4)centos 7 下载安装
  6. 将优酷视频订阅到Google Reader的方法
  7. 元芳,你怎么看,网络为何会如此流行!
  8. 搭建springboot应用,运行报错:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedd
  9. 【考研—网络安全】引言(基本概念)
  10. 成都新都区高新技术企业认定申请流程条件及申报奖励补助