DES:给出起点和终点。给出所有小岛的编号。所有路径的起始点。和遇到怪物的概率。要求在最短路的条件下维护遇见怪物的概率最小的路径。就是用 SPFA算法。每条路的权值设为1。最短路即为途径的岛数最少。同时要用pre数组维护每个点的前驱。最后递归输出所走路径。把p变为不遇见怪物的概率, 即为维护p最大。就是把原来的SPFA里的判断多加一条,如果权值相等判断概率,选择概率大的一条。

注意。这是无向图。本来觉得没有影响。很幸福的WA了。确实是。给你a->b的,就代表可以从b->a。而不是简单的可以往返。

不知道用邻接表和邻接矩阵时间差大不大。这里用了邻接表

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#include<queue>
#define N 100010
#define inf 0x1f1f1f1f int low[N]; //存储源点到每个顶点的最短距离值
bool in_que[N]; //标记一个点是否已在队列中
int cnt[N]; //记录每个点的入队次数,来判断是否出现负环
int pre[N]; // 记录每个点的前驱。即记录源点到每个点的最短路径本身。
int head[N]; //邻接矩阵的表头节点
double p[N]; //存储最短路的情况下。到每个点的p最大。
int n, m;
int h;
bool flag = true; struct Edge
{
int v, w, next;
double p;
}edge[N<<]; void addEdge(int a, int b, double c)
{
edge[h].v = b;
edge[h].w = ;
edge[h].p = c;
edge[h].next = head[a];
head[a] = h++;
} void spfa(int s)
{
for (int i=; i<=n; ++i)
{
p[i] = ;
low[i] = inf;
}
memset(pre, -, sizeof(pre));
memset(in_que, , sizeof(in_que));
queue<int>q;
in_que[s] = ;
low[s] = ;
p[s] = ; //没有怪物
q.push(s); while(!q.empty())
{
int x = q.front();
q.pop();
in_que[x] = ;
for (int i=head[x]; i!=-; i=edge[i].next)
{
int v = edge[i].v;
if (low[v] > low[x]+)
{
low[v] = low[x] + ;
p[v] = p[x]*edge[i].p;
pre[v] = x;
if (!in_que[v])
{
in_que[v] = ;
q.push(v);
}
}
else if (low[v] == low[x] + )
{
if (p[v] < p[x]*edge[i].p)
{
p[v] = p[x]*edge[i].p;
pre[v] = x;
if (!in_que[v])
{
in_que[v] = ;
q.push(v);
}
}
}
}
}
return;
} void output(int r)
{
if (pre[r] != -) output(pre[r]);
if (flag) flag = false;
else putchar(' ');
printf("%d", r);
} int main()
{
int s, t;
int a, b;
double c;
while(~scanf("%d%d", &n, &m))
{
scanf("%d%d", &s, &t);
h = ;
memset(head, -, sizeof(head));
for (int i=; i<m; ++i)
{
scanf("%d%d%lf", &a, &b, &c);
c = (-c/);
addEdge(a, b, c);
addEdge(b, a, c);
}
spfa(s);
printf("%d %.6lf\n", low[t], -p[t]);
flag = true;
output(t);
puts("");
}
return ;
}

URAL 1934 最短路变形的更多相关文章

  1. POJ-2253.Frogger.(求每条路径中最大值的最小值,最短路变形)

    做到了这个题,感觉网上的博客是真的水,只有kuangbin大神一句话就点醒了我,所以我写这篇博客是为了让最短路的入门者尽快脱坑...... 本题思路:本题是最短路的变形,要求出最短路中的最大跳跃距离, ...

  2. POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...

  3. POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 Description After going through the receipts from your car trip ...

  4. URAL 1934 spfa算法

    D - Black Spot Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  5. POJ-1797Heavy Transportation,最短路变形,用dijkstra稍加修改就可以了;

    Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K          Description Background  Hugo ...

  6. HDOJ find the safest road 1596【最短路变形】

    find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  7. HN0I2000最优乘车 (最短路变形)

    HN0I2000最优乘车 (最短路变形) 版权声明:本篇随笔版权归作者YJSheep(www.cnblogs.com/yangyaojia)所有,转载请保留原地址! [试题]为了简化城市公共汽车收费系 ...

  8. 天梯杯 PAT L2-001. 紧急救援 最短路变形

    作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...

  9. Heavy Transportation POJ 1797 最短路变形

    Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你 ...

随机推荐

  1. jz2440移植QT5.6【学习笔记】【原创】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 交叉编译工具:arm-linux-gcc (GCC)4.4.3 linux:linu3.4.2 PC环境:ubuntu18.04 一.修改/o ...

  2. python2.7+pyqt4 +eric4安装配置

    eric4安装与汉化一直没找到合适python的IDE工具,直到遇到了eric4这款开源软件.然而在使用过程中发现输出的中文字符竟然是乱码,修修改改配置总算正常显示了,何不干脆把软件界面也汉化下. 一 ...

  3. Tempter of the Bone(dfs+奇偶剪枝)题解

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  4. redis.conf 配置 详解 中文 2.8

        # redis version 2.8.19   # 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1m ...

  5. 【Maven】2.使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库

    参考文章: http://www.cnblogs.com/luotaoyeah/p/3791966.html --------------------------------------------- ...

  6. 51NOD 1057 N的阶乘

    1057 N的阶乘 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题   输入N求N的阶乘的准确值.   Input 输入N(1 <= N <= 10000) ...

  7. c#进阶之Delegate

    委托是什么?答:委托是一种类型   等同与 一个class类,继承System.MulticastDelegate,但mult....gate是一个特殊类,不能够派生 委托的调用,如何去使用 1/委托 ...

  8. 编译安装lamp (php)

    用户账号及权限管理 用户账号:'user'@'host' user: 用户名 host: 此用户访问mysqld服务时允许通过哪些主机远程创建连接: host类型:IP.网络地址.主机名.通配符(%和 ...

  9. TensorFlow上实践基于自编码的One Class Learning

    “我不知道什么是爱,但我知道什么是不爱” --One Class Learning的自白 一.单分类简介 如果将分类算法进行划分,根据类别个数的不同可以分为单分类.二分类.多分类,常见的分类算法主要解 ...

  10. PROC怎么遇到错误全局rollback---SQLServer 异常的处理

    ALTER PROCEDURE [dbo].[PROC_SMSACTIVE_UPDATE] AS BEGIN SET XACT_ABORT ON