PTA 7-3 地铁一日游 (30 分)

 

森森喜欢坐地铁。这个假期,他终于来到了传说中的地铁之城——魔都,打算好好过一把坐地铁的瘾!

魔都地铁的计价规则是:起步价 2 元,出发站与到达站的最短距离(即计费距离)每 K 公里增加 1 元车费。

例如取 K = 10,动安寺站离魔都绿桥站为 40 公里,则车费为 2 + 4 = 6 元。

为了获得最大的满足感,森森决定用以下的方式坐地铁:在某一站上车(不妨设为地铁站 A),则对于所有车费相同的到达站,森森只会在计费距离最远的站或线路末端站点出站,然后用森森美图 App 在站点外拍一张认证照,再按同样的方式前往下一个站点。

坐着坐着,森森突然好奇起来:在给定出发站的情况下(在出发时森森也会拍一张照),他的整个旅程中能够留下哪些站点的认证照?

地铁是铁路运输的一种形式,指在地下运行为主的城市轨道交通系统。一般来说,地铁由若干个站点组成,并有多条不同的线路双向行驶,可类比公交车,当两条或更多条线路经过同一个站点时,可进行换乘,更换自己所乘坐的线路。举例来说,魔都 1 号线和 2 号线都经过人民广场站,则乘坐 1 号线到达人民广场时就可以换乘到 2 号线前往 2 号线的各个站点。换乘不需出站(也拍不到认证照),因此森森乘坐地铁时换乘不受限制。

输入格式:

输入第一行是三个正整数 NM 和 K,表示魔都地铁有 N 个车站 (1 ≤ N ≤ 200),M 条线路 (1 ≤ M ≤ 1500),最短距离每超过 K 公里 (1 ≤ K ≤ 106),加 1 元车费。

接下来 M 行,每行由以下格式组成:

<站点1><空格><距离><空格><站点2><空格><距离><空格><站点3> ... <站点X-1><空格><距离><空格><站点X>

其中站点是一个 1 到 N 的编号;两个站点编号之间的距离指两个站在该线路上的距离。两站之间距离是一个不大于 106 的正整数。一条线路上的站点互不相同。

注意:两个站之间可能有多条直接连接的线路,且距离不一定相等。

再接下来有一个正整数 Q (1 ≤ Q ≤ 200),表示森森尝试从 Q 个站点出发。

最后有 Q 行,每行一个正整数 Xi**,表示森森尝试从编号为 **Xi 的站点出发。

输出格式:

对于森森每个尝试的站点,输出一行若干个整数,表示能够到达的站点编号。站点编号从小到大排序。

输入样例:

6 2 6
1 6 2 4 3 1 4
5 6 2 6 6
4
2
3
4
5

输出样例:

1 2 4 5 6
1 2 3 4 5 6
1 2 4 5 6
1 2 4 5 6

代码实现

#include <algorithm>
#include <cstdio>
#include <map>
#include <queue>
using namespace std;
const int maxn = 205;
const int INF = 0x3f3f3f3f;
int d[maxn][maxn];
int terminal[maxn], vis[maxn][maxn];
map<int, int> been[maxn];
int n, m, k;
int line[10000];int main() {
#ifdef LOCALfreopen("E:\\Cpp\\1.in", "r", stdin);
#endifscanf("%d%d%d", &n, &m, &k);for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)d[i][j] = (i == j) ? 0 : INF;int u, v, len;int fare;char ch;while (m--) {int len = 0;while (scanf("%d", &u)) {line[len++] = u;ch = getchar();if (ch == '\n') {terminal[line[0]] = terminal[line[len - 1]] = 1;for (int i = 0; i != len - 1; i += 2) {u = line[i], v = line[i + 2];d[v][u] = d[u][v] = min(d[u][v], line[i + 1]);}break;}}}for (int k = 1; k <= n; k++) {for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)d[i][j] = min(d[i][j], d[i][k] + d[k][j]);}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (i == j || d[i][j] == INF)continue;fare = 2 + d[i][j] / k;if (!been[i].count(fare) || been[i][fare] < d[i][j])been[i][fare] = d[i][j];}}int t, cur, first;queue<int> Q;scanf("%d", &t);while (t--) {first = 1;scanf("%d", &u);vis[u][u] = 1;Q.push(u);while (!Q.empty()) {cur = Q.front();Q.pop();for (int i = 1; i <= n; i++) {if (vis[u][i] || d[cur][i] == INF)continue;if (terminal[i]) {Q.push(i);vis[u][i] = 1;} else {fare = 2 + d[cur][i] / k;if (d[cur][i] == been[cur][fare]) {Q.push(i);vis[u][i] = 1;}}}}for (int i = 1; i <= n; i++) {if (vis[u][i]) {if (first) {printf("%d", i);first = 0;} elseprintf(" %d", i);}}printf("\n");}return 0;
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode--912--排序数组

给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 提示&#xff1a; 1 < nums.leng…

java 判断object类型_Java 类继承机制

封装、继承、多态是面向对象的三大特征&#xff0c;“继承”最主要的目的是为了实现代码的可复用性。通过父类与子类的继承关系&#xff0c;子类继承了父类的成员函数和成员变量&#xff0c;提高了代码的重复利用率。同时&#xff0c;子类也可以扩展自己特有的成员&#xff0c;…

一个情怀引发的生产事故(续)

接上一篇博文&#xff0c;用Roslyn动态编译C#语句片段&#xff0c;情怀了一把&#xff0c;但内存会飙升&#xff0c;执行速度也奇慢&#xff0c;这条路走不通&#xff0c;回归正道&#xff0c;说起脚本&#xff0c;Lua是常用的手段之一&#xff0c;那就看看NLua怎么样&#xff…

c++的unique函数

在STL中unique函数是一个去重函数&#xff0c; unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除&#xff0c;是把重复的元素移到后面去了&#xff0c;然后依然保存到了原数组中&#xff0c;然后 返回去重后最后一个元素的地址&#xff0c;因为un…

用户登录查全表好还是用用户名好_外贸人/货代人不要为海运难过了:请看如何查运价和调配舱位解决缺箱!...

最近很多外贸人/货代人都被海运伤透了心&#xff0c;不仅价格上涨&#xff0c;还经常没舱位或缺柜子&#xff01;整个人的心态都不好了。其实呢运价上涨这个大环境趋势&#xff0c;我们也无法改变。但是没舱位和缺柜子是属于流动性的&#xff0c;只要不死盯一家船公司还是可以解…

BCVP开发者说第4期:Remember.Core

沉静岁月&#xff0c;淡忘流年1项目简介Remember.Core一个轻量的 Web 应用框架, 具有优雅、高效、简洁、富于表达力等优点。采用 前后端分离 设计&#xff0c;是崇尚开发效率的全栈框架简洁友好 - 统一的设计规范&#xff0c;精心打磨的操作界面回应你的期待。易扩展 - 一套完整…

c++的assert函数

assert宏的原型定义在<assert.h>中&#xff0c;其作用是如果它的条件返回错误&#xff0c;则终止程序执行&#xff0c;原型定义&#xff1a; #include <assert.h> void assert( int expression ); assert的作用是现计算表达式 expression &#xff0c;如果其值为假…

c++十进制转二进制_二进制与十进制如何互相转换?

正整数的十进制转换二进制将一个十进制数除以二&#xff0c;得到的商再除以二&#xff0c;依此类推直到商等于一或零时为止&#xff0c;倒取除得的余数&#xff0c;即换算为二进制数的结果。只需记住要点&#xff1a;除二取余&#xff0c;倒序排列。由于计算机内部表示数的字节…

如何在 C# 中使用 AutoMapper

译文链接&#xff1a;https://www.infoworld.com/article/3192900/how-to-work-with-automapper-in-csharp.htmlAutoMapper 是一个非常流行的 object-to-object 映射库&#xff0c;它的目的就是帮助你实现不同类型对象之间的映射&#xff0c;举一个例子&#xff0c;在 DDD 开发…

c++STL的反向迭代器

反向迭代器 反向迭代器是一种反向遍历容器的迭代器。也就是&#xff0c;从最后一个元素到第一个元素遍历容器。反向迭代器将自增&#xff08;和自减&#xff09;的含义反过来了&#xff1a;对于反向迭代 器&#xff0c; 运算将访问前一个元素&#xff0c;而 – 运算则访问下一…

matlab eval函数_matlab自动给变量命名

在某些特定场景中&#xff0c;我们需要在一个循环中生成一系列的数据&#xff0c;并把这些数据保存到特定的变量中&#xff0c;这个时候我们就需要实现自动给变量命名&#xff0c;同时赋给变量数值。下面提供2种方法。方法1通过eval函数实现&#xff0c;举个例子clear%%%%%%%%%…

c++的STL中的map(哈希表)与unordered_map

map: unordered_map: map&#xff1a; map内部实现了一个红黑树&#xff0c;该结构具有自动排序的功能&#xff0c;因此map内部的所有元素都是有序的 unordered_map:unordered_map内部实现了一个哈希表&#xff0c;因此其元素的排列顺序是杂乱的&#xff0c;无序的 Map是STL的…

java转python推荐算法_java和python实现一个加权SlopeOne推荐算法

1 importjava.util.HashMap;2 importjava.util.Map;3 importjava.util.List;4 importjava.util.ArrayList;5 importjava.util.Comparator;6 importjava.util.Collections;7 8 /** 9 * Created by on 2016/12/8.ShiYan10 * 一.计算所有物品对的偏差11 * 二.利用偏差进行预测12 *…

IdentityServer4系列 | 简化模式

一、前言从上一篇关于资源密码凭证模式中&#xff0c;通过使用client_id和client_secret以及用户名密码通过应用Client(客户端)直接获取&#xff0c;从而请求获取受保护的资源&#xff0c;但是这种方式存在client可能存了用户密码这不安全性问题&#xff0c;所以需要做到client…

char截取字符串_字符串的排列(滑动窗口)

题目&#xff1a;给定两个字符串 s1 和 s2&#xff0c;写一个函数来判断 s2 是否包含 s1 的排列。换句话说&#xff0c;第一个字符串的排列之一是第二个字符串的子串。示例1&#xff1a;输入: s1 "ab" s2 "eidbaooo"输出: True解释: s2 包含 s1 的排列之…

c++中的全排列函数next_permutation()

全排列函数next_permutation() prev_permutation函数&#xff08;按降序排序&#xff09; 计算序列全排列的函数&#xff1a;next_permutation&#xff08;start,end&#xff09;&#xff0c;此函数求的是当前排列的下一个排列&#xff0c;这里的“下一个”&#xff0c;我们可…

学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片

第一部分&#xff1a;Consul 基础1&#xff0c;Consul 介绍官网文档描述&#xff1a;Consul 是一个网络工具&#xff0c;提供功能齐全的服务网格和服务发现。它可以做什么&#xff1a;自动化网络配置&#xff0c;发现服务并启用跨任何云或运行时的安全连接。那么&#xff0c;我…

python能做哪些客户端_Python 实现简单的客户端认证

问题 你想在分布式系统中实现一个简单的客户端连接认证功能&#xff0c;又不想像SSL那样的复杂。 解决方案 可以利用 hmac 模块实现一个连接握手&#xff0c;从而实现一个简单而高效的认证过程。下面是代码示例&#xff1a; import hmac import os def client_authenticate(con…

多线程并发如何高效实现生产者/消费者?

【导读】无需引入第三方消息队列组件&#xff0c;我们如何利用内置C#语法高效实现生产者/消费者对数据进行处理呢&#xff1f;在.NET Core共享框架&#xff08;Share Framework&#xff09;引入了通道&#xff08;Channel&#xff09;&#xff0c;也就是说无需额外通过NuGet包安…

c++牛客网面试题05. 替换空格

class Solution{public:string replaceSpace(string s){int count0,len s.size();//统计空格的个数for(char c : s){if(c )count;} s.resize(len 2 * count);//修改字符串的长度for(int i len-1, j s.size()-1;i<j;i--,j--) {if(s[i]! )s[j]s[i];else{s[j]0;s[j-1]2;s[j-…