团体程序设计天梯赛 L3-007. 天梯地图 Dijkstra

团体程序设计天梯赛 L3-007. 天梯地图(dijkstral+记录所有最短路径) L3-007. 天梯地图 团体程序设计天梯赛 L3-007. 天梯地图 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2 <= N <=500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息: 阅读详情

L3-007. 天梯地图

时间限制
300 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。

输入格式:

输入在第一行给出两个正整数N(2 <= N <=500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息:

V1 V2 one-way length time

其中V1和V2是道路的两个端点的编号(从0到N-1);如果该道路是从V1到V2的单行线,则one-way为1,否则为0;length是道路的长度;time是通过该路所需要的时间。最后给出一对起点和终点的编号。

输出格式:

首先按下列格式输出最快到达的时间T和用节点编号表示的路线:

Time = T: 起点 => 节点1 => ... => 终点

然后在下一行按下列格式输出最短距离D和用节点编号表示的路线:

Distance = D: 起点 => 节点1 => ... => 终点

如果最快到达路线不唯一,则输出几条最快路线中最短的那条,题目保证这条路线是唯一的。而如果最短距离的路线不唯一,则输出途径节点数最少的那条,题目保证这条路线是唯一的。

如果这两条路线是完全一样的,则按下列格式输出:

Time = T; Distance = D: 起点 => 节点1 => ... => 终点

输入样例1:
10 15
0 1 0 1 1
8 0 0 1 1
4 8 1 1 1
5 4 0 2 3
5 9 1 1 4
0 6 0 1 1
7 3 1 1 2
8 3 1 1 2
2 5 0 2 2
2 1 1 1 1
1 5 0 1 3
1 4 0 1 1
9 7 1 1 3
3 1 0 2 5
6 3 1 2 1
5 3
输出样例1:
Time = 6: 5 => 4 => 8 => 3
Distance = 3: 5 => 1 => 3
输入样例2:
7 9
0 4 1 1 1
1 6 1 3 1
2 6 1 1 1
2 5 1 2 2
3 0 0 1 1
3 1 1 3 1
3 2 1 2 1
4 5 0 2 2
6 5 1 2 1
3 5
输出样例2:
Time = 3; Distance = 4: 3 => 2 => 5



#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <queue>

using namespace std;

const int maxn = 500, INF = 2147483647;

struct Edge {
	int v1, v2, length, time;
	Edge() {}
	Edge(int v1, int v2, int length, int time) : v1(v1), v2(v2), length(length), time(time) {}
};

struct HeapNode {
	int v, w;
	HeapNode() {}
	HeapNode(int v, int w) : v(v), w(w) {}
	bool operator < (const HeapNode oh) const {
		return oh.w < w;
	}
};

int N, M, s, e;
vector<int> G[maxn + 5], patht, pathd;
vector<Edge> edges;
bool vis[maxn + 5];
int dd[maxn + 5], dt[maxn + 5], dr[maxn + 5], pd[maxn + 5], pt[maxn + 5];
priority_queue<HeapNode> q;

void init1() {
	memset(vis, false, sizeof(vis));
	memset(pt, -1, sizeof(pt));
	while (!q.empty()) q.pop();
	for (int i = 0; i < N; i++) {
		dt[i] = INF;
		dd[i] = INF;
	}
}

void init2() {
	memset(vis, false, sizeof(vis));
	memset(pd, -1, sizeof(pd));
	while (!q.empty()) q.pop();
	for (int i = 0; i < N; i++) {
		dd[i] = INF;
		dr[i] = INF;
	}
}

void dijkstra1() {
	init1();
	q.push(HeapNode(s, 0));
	dt[s] = dd[s] = 0;
	while (!q.empty()) {
		HeapNode thn = q.top(); q.pop();
		int v = thn.v;
		vis[v] = true;
		for (int i = 0; i < G[v].size(); i++) {
			Edge ee = edges[G[v][i]];
			int from = ee.v1, to = ee.v2, length = ee.length, time = ee.time;
			if (!vis[to]) {
				if (dt[from] < INF) {
					if (dt[from] + time < dt[to]) {
						dt[to] = dt[from] + time;
						dd[to] = dd[from] + length;
						pt[to] = from;
						q.push(HeapNode(to, dt[to]));
					}
					else if (dt[from] + time == dt[to] && dd[from] + length < dd[to]) {
						dd[to] = dd[from] + length;
						pt[to] = from;
						q.push(HeapNode(to, dt[to]));
					}
				}
			}
		}
	}
	int x = pt[e];
	patht.push_back(e);
	while (x != -1) {
		patht.push_back(x);
		x = pt[x];
	}
}

void dijkstra2() {
	init2();
	q.push(HeapNode(s, 0));
	dd[s] = dr[s] = 0;
	while (!q.empty()) {
		HeapNode thn = q.top(); q.pop();
		int v = thn.v;
		vis[v] = true;
		for (int i = 0; i < G[v].size(); i++) {
			Edge ee = edges[G[v][i]];
			int from = ee.v1, to = ee.v2, length = ee.length, time = ee.time;
			if (!vis[to]) {
				if (dd[from] < INF) {
					if (dd[from] + length < dd[to]) {
						dd[to] = dd[from] + length;
						dr[to] = dr[from] + 1;
						pd[to] = from;
						q.push(HeapNode(to, dd[to]));
					}
					else if (dd[from] + length == dd[to] && dr[from] + 1 < dr[to]) {
						dr[to] = dr[from] + 1;
						pd[to] = from;
						q.push(HeapNode(to, dd[to]));
					}
				}
			}
		}

	}

	int x = pd[e];
	pathd.push_back(e);
	while (x != -1) {
		pathd.push_back(x);
		x = pd[x];
	}
}

int main()
{
	cin >> N >> M;
	for (int i = 0; i < M; i++) {
		int v1, v2, oneway, length, time;
		scanf("%d%d%d%d%d", &v1, &v2, &oneway, &length, &time);

		edges.push_back(Edge(v1, v2, length, time));
		G[v1].push_back(edges.size() - 1);

		if (!oneway) {
			edges.push_back(Edge(v2, v1, length, time));
			G[v2].push_back(edges.size() - 1);
		}
	}

	scanf("%d%d", &s, &e);
	dijkstra1();
	dijkstra2();
	bool flag = true;
	if (patht.size() == pathd.size()) {
		for (int i = 0; i < patht.size(); i++) {
			if (patht[i] != pathd[i]) {
				flag = false;
				break;
			}
		}
	}
	else {
		flag = false;
	}
	if (flag) {
		printf("Time = %d; ", dt[e]);
		printf("Distance = %d: ", dd[e]);
		for (int i = pathd.size() - 1; i >= 0; i--) {
			printf(i == pathd.size() - 1 ? "%d" : " => %d", pathd[i]);
		}
	}
	else {
		printf("Time = %d: ", dt[e]);
		for (int i = patht.size() - 1; i >= 0; i--) {
			printf(i == patht.size() - 1 ? "%d" : " => %d", patht[i]);
		}
		puts("");
		printf("Distance = %d: ", dd[e]);
		for (int i = pathd.size() - 1; i >= 0; i--) {
			printf(i == pathd.size() - 1 ? "%d" : " => %d", pathd[i]);
		}
	}
	return 0;
}




团体程序设计天梯赛竞赛题--登顶题【L3-007 天梯地图】 登顶级 3 道题,每道题 30 分,满分为 90 分。 阅读详情

相关推荐

别再只用跳层连接了!手把手教你用DASI和MDCR模块提升红外小目标检测精度

本文详细介绍了如何利用DASI和MDCR模块提升红外小目标检测精度。通过分析传统跳层连接的缺陷,提出维度感知的特征选择性融合(DASI)和多尺度感受野精炼器(MDCR)的创新方案,显著提升小目标检测性能。实验证明,该方法在多个场景下AP@0.5提升达15.4%,特别适用于安防监控和遥感图像分析。

weixin_28715081的博客 224

天梯赛练习 天梯地图(SPFA)

本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2 \le≤ N \le≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息: V1

Rutifrl的博客 1338

MYSQL、ORACLE、PostgreSQL数据库对象层次及权限管理对比

本文为出于自己扩展、比较、图形化的思维路径自行总结归纳,可能有些细节不太准确,欢迎指正。MySQL、Oracle、PostgreSQL关系型数据库都有管理员用户、用户、权限管理、表函数索引等数据库对象,schema。但在数据库对象隶属层次上有差异和相同的地方。

rachel_2016的博客 1489

PTA:7-101 天梯地图 (30分)---加解析(dfs深度搜索)

7-101 天梯地图 (30分) 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2 ≤ N ≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息:...

zlzhujust@gmail.com 1398

铭飞MCMS源码部署

文章目录前言一、下载铭飞源码二、部署源码1.使用IDEA打开源码2.配置tomcat环境2.1下载tomcat并测试是否可以成功启动(此处不赘述)2.2在IDEA中安装tomcat环境并配置3.添加数据库,并配置3.1新建数据库3.2 导入sql配置三、启动测试 前言 铭飞MCMS基于IDEA、tomcat和mysql的环境搭建。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载铭飞源码 gitee:https://gitee.com/mingSoft/MCMS/releases(各种版本按需下

MARS_ZORO的博客 4062

LT9611EX芯片实战:如何用双端口MIPI转HDMI1.4打造高清播放器(附配置代码)

本文详细介绍了如何使用龙迅半导体的LT9611EX芯片实现双端口MIPI转HDMI1.4的高清播放器开发。内容涵盖芯片特性、硬件设计要点、寄存器配置技巧及完整代码实现,特别适合嵌入式视频处理应用,如机顶盒和便携式媒体播放器。

weixin_29256771的博客 321

7-1 天梯地图 (PTA-数据结构)

本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。

FellAveal的博客 2340

Linux系统下奥比中光Astra Pro相机SDK部署与避坑指南

本文详细指导了在Linux系统下部署奥比中光Astra Pro深度相机SDK的全过程,涵盖系统准备、SDK安装、设备权限配置及常见问题排查。重点解析了USB设备规则配置这一关键步骤,并提供了Python与C++项目的集成方法,旨在帮助开发者快速完成相机配置,避免常见陷阱。

weixin_28455801的博客 298

天梯赛-最短路径-天梯地图&&直捣黄龙-题解

题干 7-28 天梯地图 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2 ≤ N ≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息: V...

东君不爱惜 939

EGO-Planner文章解读(一)——论文原理和算法实现

详细解读egoplanner论文和代码

fegxg的博客 3984

共模电感在EMI滤波中的实战应用与设计技巧

本文深入探讨了共模电感在EMI滤波中的关键作用与设计技巧,涵盖电感值选择、饱和电流风险、磁芯材料性能及绕组工艺等实战经验。通过具体案例解析,展示了共模电感在开关电源、高速接口及汽车电子中的高效应用,帮助工程师解决电磁兼容问题并提升信号完整性。

weixin_27051161的博客 416

Dijkstra(L3-007 天梯地图 (30 分))

原题链接 L3-007 天梯地图 (30 分) 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2 ≤ N ≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一...

cp0328的博客 3636

【Mode Management】AUTOSAR架构下RH850-F1KM芯片深度休眠配置实践

AUTOSAR架构下RH850-F1KM芯片深度休眠配置实践

qq_36056498的博客 1087

团体程序设计天梯赛-练习集 L3-007. 天梯地图 最短路 dijkstra 解题报告

L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短

小夥的博客 2067

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

团体程序设计天梯赛 L3-007 天梯地图 (30分)(dijkstra变形)

题目链接: L3-007 天梯地图 (30分) 思路: 这是PAT甲级原题…原本想直接复制之前的code,奈何博主觉得自己以前写的太乱了,遂重新写了一遍; 这道题使用两次dijkstra即可,但是需要稍微改变一下,例如求最快最短的情况下,慢的需要更新为快的毋庸置疑,同时同样快的应该考虑路径长度是否需要更新; 代码: #include<bits/stdc++.h> using ...

Yuhan的博客 587

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

PTA 团体程序设计天梯赛-练习集 L3-007 天梯地图 (30分)

本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2≤N≤500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息: V1 V2 one-wa...

weixin_41514525的博客 1006

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

PTA团体程序设计天梯赛 L3-007 天梯地图 (Java)(满分不超时)

本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。

weixin_43897853的博客 368

L3-007. 天梯地图-PAT团体程序设计天梯赛GPLT

L3-007. 天梯地图 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2 V1 V2 one-way length time 其中V1和V2是道路的两个端点的编号(

柳婼 の blog 2111

【团体程序设计天梯赛】L3-007 天梯地图

单源最短路、dijkstra

whaoe_m的博客 339

团体程序设计天梯赛(L3-007 天梯地图 (30 分))

题目: 思路分析: 一个最短路的题目 不过是多个多个关键字 同时要约束其他条件 注意细节(这道题花了2个小时!fwfwfw 代码实现: /* *@Author: GuoJinlong *@Language: C++ */ //#include <bits/stdc++.h> /* * __----~~~~~~~~~~~------___ * .

m0_57006708的博客 262

团体程序设计天梯赛-练习集 L2-001 紧急救援 dijkstra 解题报告

L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援

小夥的博客 1975

PAT团体程序设计天梯赛GPLT题解目录

github源码地址:https://www.github.com/liuchuo/PAT ID Title C/C++(附分析) 备注 L1-001 Hello World 查看题解 水题 L1-002 打印沙漏 查看题解 图形打印 L1-003 个位数统计 查看题解 字符串处理 L1-004 计算摄氏温度

herbertpotter的博客 911

「PTA L3-007」天梯地图【最短路径】

L3-007 天梯地图 (30 分) 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2≤N≤500)N(2 \leq N \leq 500)N(2≤N≤500)和MMM,分别为地图中所有标记地点的个数和连接...

wzw 731

PTA:7-13 天梯地图 (30 分)

本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2 ≤ N ≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息: V1 V2 one-way le...

lizhenhao 1753

天梯赛 天梯地图 Dijkstra算法 C++

L3-1 天梯地图 (30 分) 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2≤N≤500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息: V1 V2 one-way length time 其中V1和V2是道路的两个端点的编号...

Prudento的博客 1397

【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解

problem L3-007 天梯地图 (30分) 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式: 输入在第一行给出两个正整数N(2 ≤ N ≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息: V1 V2 one-way length time 其中V1和V2是道路的两个端点的编号(从

小哈里的博客 1397
上一篇: pat L2-010. 排座位 floyd 或 并查集
下一篇: 团体程序设计天梯赛 L3-008. 喊山 BFS
Daemoonn
博客等级 码龄11年 42粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值