题目链接:

https://vjudge.net/problem/ZOJ-1655

题目大意:

有N-1个城市给首都(第N个城市)支援物资,有M条路,走每条路要耗费一定百分比的物资。问给定N-1个城市将要提供的物资,和每条路的消耗百分比。求能送到首都的最多的物资数量

思路:

由于每条路有费用率,比如1-2路的费用率是0.2,2-3的费用率是0.3,那么x质量的物品经1-3只剩下x*(1-0.2)*(1-0.3),一开始弄错了,以为消耗的是X*0.2*0.3,用最短路求,这显然是错误的,因为在路上消耗的不能算成费用率的乘积,比如之前的例子,在路上消耗的应该是x*0.2 + x*(1-0.8)*0.3,而直接计算剩余的,就可以用乘积的形式x*(1-0.2)*(1-0.3),所以直接将Map存为剩余率(1-费用率),而且数据中存在重边,所以要保存剩余率最大的那条边,然后用dijkstra求最长路,最长的话也是可dijkstra最短路思想一样,只是找出离源点的最短点变成离源点的最长点,更新dist时也是往大的更新,dist初始化时应该初始化成0。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<sstream>
#define MEM(a, b) memset(a, b, sizeof(a));
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
int T, n, m, cases, tot;
int w[maxn];
double Map[maxn][maxn];
double d[maxn];//d[i]表示从源点到i的最大剩余率,由于是无向图,所以也是i到源点的最大剩余率
bool v[maxn];
void dijkstra(int u)
{
for(int i = ; i <= n; i++)d[i] = ;//初始化成最小的
d[u] = ;
memset(v, , sizeof(v));
for(int i = ; i < n; i++)
{
int x;
double m = ;//这里是double!!!因为这个点一直WA
for(int i = ; i <= n; i++)if(!v[i] && d[i] - m > 1e-)m = d[x = i];//这里改成找最大值
v[x] = ;
for(int i = ; i <= n; i++)
{
if(!v[i] && Map[x][i] >= )d[i] = max(d[i], d[x] * Map[x][i]);//松弛操作变成更新为最大值
}
}
}
int main()
{
while(cin >> n >> m)
{
for(int i = ; i < n; i++)cin >> w[i];
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)Map[i][j] = ;
int u, v;
double c;
while(m--)
{
cin >> u >> v >> c;
Map[u][v] = Map[v][u] = max(1.0 - c, Map[u][v]);//有重边!!!
}
dijkstra(n);
double ans = ;
for(int i = ; i < n; i++)
{
ans = ans + 1.0 * w[i] * d[i];
}
printf("%.2f\n", ans);
}
return ;
}

ZOJ-1655 Transport Goods---dijkstra变形&&最长路的更多相关文章

  1. ZOJ - 1655 Transport Goods(单源最长路+迪杰斯特拉算法)

    题目: 有N-1个城市给首都(第N个城市)支援物资,有M条路,走每条路要耗费一定百分比(相对于这条路的起点的物资)的物资.问给定N-1个城市将要提供的物资,和每条路的消耗百分比.求能送到首都的最多的物 ...

  2. [HDU 1317]XYZZY[SPFA变形][最长路]

    题意: 一个图, 点权代表走到该点可获得的能量值. 可正可负. 一个人从1 号出发,带有100点能量. 问是否有一种方案可使人在能量值>0的时候走到n. 思路: 这个题首先要注意点权. 其实就是 ...

  3. POJ 1797 Heavy Transportation(Dijkstra变形——最长路径最小权值)

    题目链接: http://poj.org/problem?id=1797 Background Hugo Heavy is happy. After the breakdown of the Carg ...

  4. B - Frogger 最短路变形('最长路'求'最短路','最短路'求'最长路')

    http://poj.org/problem?id=2253 题目大意: 有一只可怜没人爱的小青蛙,打算去找他的女神青蛙姐姐,但是池塘水路不能走,所以只能通过蹦跶的形式到达目的地,问你从小青蛙到青蛙姐 ...

  5. HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径)

    HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径) Description A group of researchers ar ...

  6. zoj 3795 Grouping tarjan缩点 + DGA上的最长路

    Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Practic ...

  7. POJ 2472 106 miles to Chicago(Dijstra变形——史上最坑的最长路问题)

    题目链接 :http://poj.org/problem?id=2472 Description In the movie "Blues Brothers", the orphan ...

  8. NYOJ 1248 海岛争霸(Dijkstra变形——最短路径最大权值)

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=1248 描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比 ...

  9. POJ.1797 Heavy Transportation (Dijkstra变形)

    POJ.1797 Heavy Transportation (Dijkstra变形) 题意分析 给出n个点,m条边的城市网络,其中 x y d 代表由x到y(或由y到x)的公路所能承受的最大重量为d, ...

随机推荐

  1. 用session做权限控制

    一个需要用户进行登录的网站,基本上都会设置用户权限,对不同的用户进行权限控制.例如:一个网站肯定会有一个管理员管理着普通的用户,普通的用户不可能对其他用户有着类似于增删改查等操作,这样网站都乱了--, ...

  2. Mycat 分片规则详解--日期(天)分片

    实现方式:按照日期来分片 优点:使数据按照日期来进行分时存储 缺点:由于数据是连续的,所以该方案不能有效的利用资源 配置示例: <tableRule name="sharding-by ...

  3. Day3---------Linux操作系统目录结构

    一.Linux系统文件树状结构 "/" 根目录 "." 当前目录 .. 父目录,既上一层目录 pwd 显示当前目录路径 ls. = ls = ls/ 显示当前目 ...

  4. 【Python】 基于秘钥的对称加密

    [Crypto] 关于用python进行信息的加密,类似的解决方案有很多比如用base64编码进行encode,再或者是hashlib来进行hash.但是还缺少一种明明场景很简单的解决方案,就是把利用 ...

  5. react 实用的性能优化方式

    react 组件渲染分为初始化渲染和更新渲染,当我们更新某个组件的时候,只是想关键路径上组件的render,但react的默认做法是调用所以组件的reder,再生成虚拟dom进行对比,如不变则不进行更 ...

  6. Post Office

    Post Office poj-1160 题目大意:给你在数轴上的n个村庄,建立m个邮局,使得每一个村庄距离它最近的邮局的距离和最小,求距离最小和. 注释:n<=300,m<=min(n, ...

  7. WPF笔记1 用VS2015创建WPF程序

    使用WPF创建第一个应用程序.实现功能如下: 单击"Red"按钮,文本显示红色:单击"Black"按钮,文本显示黑色:单击"Back"按钮, ...

  8. jmeter连接Mysql数据库测试性能初探

    Jmeter mysql性能测试演示 1.  Jmeter是java开发的,jmeter连接mysql数据库当然需要jdbc驱动,这个可以在网上下载mysql-connector-java包,然后解压 ...

  9. 『开源重编译』System.Data.SQLite.dll 自适应 x86 x64 AnyCPU 重编译

    背景: > System.Data.SQLite.dll 程序集 不能良好的支持 AngCPU 格式 System.Data.SQLite.dll 在 适应 x86 和 x64 有三个方案: & ...

  10. JavaScript(第二十三天)【事件入门】

    JavaScript事件是由访问Web页面的用户引起的一系列操作,例如:用户点击.当用户执行某些操作的时候,再去执行一系列代码.   一.事件介绍 事件一般是用于浏览器和用户操作进行交互.最早是IE和 ...