L2-001. 紧急救援(最短路的变形)*
#include <cstdio>
#include <algorithm>
using namespace std;
int const MAX = ;
int const INF = 0x3fffffff;
int mp[MAX][MAX], val[MAX], path[MAX], dis[MAX], re[MAX], totval[MAX], pathnum[MAX];
bool vis[MAX];
int n, m, s, d; void Dijkstra(int v0)
{
for(int i = ; i < n; i++)
dis[i] = INF;
vis[v0] = true;
dis[v0] = ;
totval[v0] = val[v0];
pathnum[v0] = ;
for(int i = ; i < n; i++)
{
if(mp[v0][i] != INF && i != v0)
{
dis[i] = mp[v0][i];
path[i] = v0;
totval[i] = val[v0] + val[i];
pathnum[i] = ;
}
}
for(int i = ; i < n - ; i++)
{
int mi = INF, mival = , u = v0;
for(int j = ; j < n; j++)
{
if(!vis[j] && dis[j] < mi)
{
mi = dis[j];
u = j;
}
}
vis[u] = true;
for(int j = ; j < n; j++)
{
if(!vis[j])
{
if(dis[u] + mp[u][j] < dis[j])
{
pathnum[j] = pathnum[u];
dis[j] = dis[u] + mp[u][j];
totval[j] = totval[u] + val[j];
path[j] = u;
}
else if(dis[u] + mp[u][j] == dis[j])
{
pathnum[j] += pathnum[u];
if(totval[j] < totval[u] + val[j])
{
totval[j] = totval[u] + val[j];
path[j] = u;
}
}
}
}
}
} int main()
{
scanf("%d %d %d %d", &n, &m, &s, &d);
for(int i = ; i < n; i++)
scanf("%d", &val[i]);
for(int i = ; i < n; i++)
for(int j = ; j < n; j++)
mp[i][j] = INF;
int x, y, l;
for(int i = ; i < m; i++)
{
scanf("%d %d %d", &x, &y, &l);
mp[x][y] = min(mp[x][y], l);
mp[y][x] = mp[x][y];
}
Dijkstra(s);
int num = , cur = d;
while(cur != s)
{
re[num ++] = cur;
cur = path[cur];
}
re[num ++] = s;
printf("%d %d\n", pathnum[d], totval[d]);
for(int i = num - ; i > ; i--)
printf("%d ", re[i]);
printf("%d\n", re[]);
}
L2-001. 紧急救援(最短路的变形)*的更多相关文章
- 天梯杯 PAT L2-001. 紧急救援 最短路变形
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...
- PAT-GPLT训练集 L2-001 紧急救援(最短路)
PAT-GPLT训练集 L2-001 紧急救援 题目大意:求最短路的条数,最短路中的权重和的最大值和这条最短路的路线 分析:使用dijkstra算法求出最短路,并且对dijkstra算法进行变化,设起 ...
- PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
- 拼题 L2-001 紧急救援 最短路计数+记录路径
https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 L2-001 紧急救援 (25 分) 作 ...
- UVA 12661 Funny Car Racing 有趣的赛车比赛(最短路,变形)
题意:赛道有n个交叉点,和m条单向路径(有重边),每条路都是周期性关闭的,且通过仍需一段时间.在比赛开始时,所有道路刚好打开,选择进入该道路必须满足“在打开的时间段进入,在关闭之前出来”,即不可在路上 ...
- UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
题意: 给一个由n*m个正方形格子组成的矩形,其中每个格子的边都是可以走的,长度给定,规定:如果在进入该路前需要拐弯,或者走完该路需要拐弯,都是需要付出双倍距离的(每条路最多算2倍).问从起点到终点的 ...
- DAG求最短路--TSP变形--状压dp
DAG状压dp的一种 题目: $m$个城市,$n$张车票,第i张车票上的时间是$t_i$, 求从$a$到$b$的最短时间,如果无法到达则输出“impossible” 解法: 考虑状态:“现在在城市$v ...
- UVA 10801 Lift Hopping 电梯换乘(最短路,变形)
题意: 有n<6部电梯,给出每部电梯可以停的一些特定的楼层,要求从0层到达第k层出来,每次换乘需要60秒,每部电梯经过每层所耗时不同,具体按 层数*电梯速度 来算.问经过多少秒到达k层(k可以为 ...
- poj1797(最短路小变形)
题目连接:http://poj.org/problem?id=1797 题意: 分析:dp[i]表示到达i点的过程中的最大承受重量,更新到i点时可能有多条路径,由优先队列堆出最大的那条即可. #inc ...
随机推荐
- Leetcode 870. 优势洗牌
870. 优势洗牌 显示英文描述 我的提交返回竞赛 用户通过次数49 用户尝试次数92 通过次数49 提交次数192 题目难度Medium 给定两个大小相等的数组 A 和 B,A 相对于 B 的 ...
- Docker的简单介绍及使用
Docker介绍 Docker是Docker.Inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源. Doc ...
- summary_16th Nov, 2018
一. 编程语言的分类: a. 机器语言:直接使用二进制指令去编写程序,必须考虑硬件细节 b:汇编语言:用英文标签取代二进制指令去编写程序,必须考虑硬件细节 c:高级语言:用人类能理解的方式编写程序,通 ...
- python 利用turtle库绘制七段数码管的方式,绘制当前事件(时分秒00:00:00)
# coding:utf-8# 绘制七段数码管,显示当前时间import timeimport turtle as tt # 绘制间隔def drawGap(): tt.penup() tt.fd(3 ...
- [HDU4585]Shaolin
Problem 问你一个数的前驱和后继 Solution Treap模板题 Notice 注意输出那个人的编号 Code #include<cmath> #include<cstdi ...
- (C/C++学习笔记) 七. 类型转换
七. 类型转换 ● 隐式类型转换 隐式类型转换 implicit type conversions #include<iostream> using namespace std; void ...
- Java 中的代理模式及动态代理
原文:https://blog.csdn.net/briblue/article/details/73928350
- 菜鸟翻译:国外的一个关于.net core的学习系列 第一天(安装并运行.NET core 到windox系统里面)
原文地址: Day 1 - Installing and Running .NET Core on a Windows Box 免责声明:我不是.NET Core 的团队成员.我使用的工具是公开可用的 ...
- Iterator 与ListIterator的区别
Iterator 与ListIterator的区别: 1.Iterator能够迭代Set和List集合的元素,而ListIterator只能迭代List集合的元素 2.Iterator只能前向迭代,L ...
- mysql存储过程造数
性能测试时,数据库表通常需要很多数据,此时我们可以用存储过程来造数,以下代码mysql.Oracle都可以用 首先,先查看数据库表的设计,可以看到每张表有多少字段,分别都是什么类型,哪个字段是自动增长 ...