题目背景

题目描述

在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

思路:

  用dis数组存起输入的:需要扣除z%的手续费,通过这个进行dijkstra

  不过有一点不同就是:

        普通的dijkstra是从dis数组里面往小里找,而这道题是从较大的里面找(因为最后输出的需要是最小的,那么剩余的百分之几一定是最大的)

坑点:

  松弛操作的时候也如此(思路):寻找从当前点出发到达另一点得到的百分比比之前剩余金额的百分比要大才能进行松弛操作

上代码:

#include <iostream>
#include <cstdio>
using namespace std; const int M = ;
int n,m,a,b,k;
double map[M][M],minn;
double dis[M];
bool vis[M]; void dijkstra(int start)
{
for(int i=; i<=n; i++)
dis[i]=map[start][i];
vis[start]=true;
dis[start]=;//必须进行赋值1,因为若进行更改将使用乘法(0*every==0)
for(int i=; i<n; i++)
{
minn=;
for(int j=; j<=n; j++)
if(!vis[j]&&dis[j]>minn) //寻找剩余金额最大的
minn=dis[j],k=j;
vis[k]=true;
if(k==b) break;//结束标志
for(int q=; q<=n; q++)
if(!vis[q]&&dis[q]<dis[k]*map[k][q])
dis[q]=dis[k]*map[k][q];//进行松弛
}
} int main()
{
double z;
scanf("%d%d",&n,&m);
for(int i=,x,y; i<=m; i++)
{
cin>>x>>y>>z;
map[x][y]=map[y][x]=(-z)/;//表示是原金额的百分之几
}
cin>>a>>b;
dijkstra(a);
printf("%.8lf\n",/dis[b]);
//绝对不能在dijkstra函数里面进行输出,因为有break操作,结果导致直接输出100
return ;
}

洛谷P1576 最小花费x的更多相关文章

  1. 洛谷—— P1576 最小花费

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

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

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

  3. 洛谷 P1576 最小花费

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

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

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

  5. 洛谷 P1756 最小花费

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

  6. 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划

    洛谷4951 地震 #include<iostream> #include<cstdio> #include<algorithm> #define go(i,a,b ...

  7. Bzoj1486/洛谷P3199 最小圈(0/1分数规划+spfa)/(动态规划+结论)

    题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum ...

  8. 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...

  9. P1576 最小花费 洛谷

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

随机推荐

  1. t-sql最短路径搜索

    SET STATISTICS IO ON; SET STATISTICS TIME ON; GO IF OBJECT_ID(N'dbo.t1') IS NOT NULL DROP TABLE dbo. ...

  2. iframe在firefox下的无法正常target问题

    今日在改一个网站的时候碰到个奇葩的问题. 把网站按照结构划分,做了个主页面,嵌入iframe,设定该iframe的name,主页面上的链接使用target保证在iframe中打开该链接. 听上去很常规 ...

  3. Idea中新建maven项目的目录结构

    maven项目的目录结构如下所示 pom.xml文件内容如下所示 <?xml version="1.0" encoding="UTF-8"?> &l ...

  4. Python3学习笔记-更新中

    1.Python概况 2.Anaconda安装及使用 3.Pycharm安装及使用 4.Hello World!!! 5.数据类型及类型转换 6.分支结构 7.循环语句 8.异常

  5. PHPstorm支持YAF框架代码自动提示

    文件下载地址:https://github.com/xudianyang/yaf.auto.complete 然后找到phpstorm     File->settings->Langua ...

  6. liunx忘记用户密码

    1.vim /etc/my.cnf [mysqld] skip-grant-tables ##追加此行,跳过权限表, 2.重启mysql systemctl restart mysqld 3.mysq ...

  7. Entity Framework Core Relationship的学习笔记

    说明 此例筛选了感兴趣及常用部分 参考文献 https://docs.microsoft.com/en-us/ef/core/modeling/relationships One to Many Ma ...

  8. wpf GridSplitter左右托不了或者拖拽异常

    对于水平分割线,需要将verticalAlignment属性设置为Center 对于垂直分割线,需要将horizontalAlignment属性设置为center 切记切记,不然很苦逼....

  9. scrapyd使用教程

    1. 安装服务器: pip install scrapyd 启动: scrapyd 访问:127.0.0.1:6800 2. 安装客户端 pip install scrapyd-client 3. 进 ...

  10. 记一些云服务器上部署koa2项目遇到的问题

    云服务器系统版本centos7.2,部署的项目koa2,node版本: 10.16.0 一.pm2的一些问题 1.安装pm2: npm install -g pm2 2.建立软链接,使pm2能全局使用 ...