题目地址:

https://www.acwing.com/problem/content/1139/

有一天,琪琪想乘坐公交车去拜访她的一位朋友。由于琪琪非常容易晕车,所以她想尽快到达朋友家。现在给定你一张城市交通路线图,上面包含城市的公交站台以及公交线路的具体分布。已知城市中共包含nnn个车站(编号1n1~n1 n)以及mmm条公交线路。每条公交线路都是单向的,从一个车站出发直接到达另一个车站,两个车站之间可能存在多条公交线路。琪琪的朋友住在sss号车站附近。琪琪可以在任何车站选择换乘其它公共汽车。请找出琪琪到达她的朋友家(附近的公交车站)需要花费的最少时间。

输入格式:
输入包含多组测试数据。每组测试数据第一行包含三个整数n,m,sn,m,sn,m,s,分别表示车站数量,公交线路数量以及朋友家附近车站的编号。接下来mmm行,每行包含三个整数p,q,tp,q,tp,q,t,表示存在一条线路从车站ppp到达车站qqq,用时为ttt。接下来一行,包含一个整数www,表示琪琪家附近共有www个车站,她可以在这www个车站中选择一个车站作为始发站。再一行,包含www个整数,表示琪琪家附近的www个车站的编号。

输出格式:
每个测试数据输出一个整数作为结果,表示所需花费的最少时间。如果无法达到朋友家的车站,则输出−1-1−1。每个结果占一行。

数据范围:
n≤1000,m≤20000n≤1000,m≤20000n≤1000,m≤20000
1≤s≤n1≤s≤n1≤s≤n
0<w<n0<w<n0<w<n
0<t≤10000<t≤10000<t≤1000

题目的意思是有多个点可以作为起点,问哪个起点到终点的最短路最短。一个比较好的并且很通用的办法是开一个虚拟源点,这个源点到每个起点的距离都是000,这样问题就转化为从这个虚拟源点到终点的最短路距离是多少。这个方法也适用于有多个终点可供选择的情况。最短路可以采用Dijkstra算法来做。代码如下:

#include <iostream>
#include <cstring>
using namespace std;typedef pair<int, int> PII;// 注意边要多开1000条,因为从虚拟源点到每个起点也多建了一条边
const int N = 1010, M = 21010;
int n, m, T;
int h[N], e[M], ne[M], w[M], idx;
int dist[N];
bool st[N];void add(int a, int b, int c) {e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}int dijkstra() {memset(dist, 0x3f, sizeof dist);memset(st, 0, sizeof st);dist[0] = 0;for (int i = 0; i <= n; i++) {int t = 0x3f3f3f3f, v = 0;for (int j = 0; j <= n; j++)if (!st[j] && dist[j] < t) t = dist[j], v = j;if (v == T) return dist[T];st[v] = true;for (int i = h[v]; ~i; i = ne[i]) {int j = e[i];if (!st[j] && dist[j] > dist[v] + w[i])dist[j] = dist[v] + w[i];}}return -1;
}int main() {while (~scanf("%d%d%d", &n, &m, &T)) {// 注意初始化图的时候要把idx也置0memset(h, -1, sizeof h);idx = 0;while (m--) {int a, b, c;scanf("%d%d%d", &a, &b, &c);add(a, b, c);}int s;scanf("%d", &s);while (s--) {int v;scanf("%d", &v);add(0, v, 0);}printf("%d\n", dijkstra());}return 0;
}

每个case时间复杂度O(n2)O(n^2)O(n2),空间O(n)O(n)O(n)。

【ACWing】1137. 选择最佳线路相关推荐

  1. 算法提高课-图论-单源最短路的扩展应用-AcWing 1137. 选择最佳线路:多源最短路、虚拟源点

    题目分析 来源:acwing 分析: 本题有多组测试数据,如果对每个源点暴力使用dijkstra,会超时. 好的做法:建立虚拟源点S,让S到所有真实起点的边权为0,这样原问题就可以转换为从虚拟源点S到 ...

  2. 连线自动路由算法:在GEF中实现连线的自动直角路由,智能避障并绕开模型,选择最佳路径进行布线,仿Visio效果

    在使用GEF(图形编辑框架)开发建模工具时,比如利用GEF实现程序流程图建模功能,有时对连线的路由方式会有比较高的要求,比如连线自动采用直角布局,要能够智能地避障并绕开模型,选择最佳路径进行布线.在建 ...

  3. 如何为应用选择最佳的FPGA(下)

    如何为应用选择最佳的FPGA(下) How to select an FPGA board? FPGA板的选择在很大程度上受FPGA本身的影响,也受整个板的特性和性能的影响.们已经在上面的章节中讨论了 ...

  4. 如何为应用选择最佳的FPGA(上)

    如何为应用选择最佳的FPGA(上) How To Select The Best FPGA For Your Application 在项目规划阶段,为任何一个项目选择一个FPGA部件是最关键的决策之 ...

  5. mysql索引优化规则_Mysql优化选择最佳索引规则

    索引的目的在于提高查询效率,其功能可类比字典,通过该索引可以查询到我们想要查询的信息,因此,选择建立好的索引十分重要,以下是为Mysql优化选择最佳索引的方法步骤: 1. 首先列出查询中所有使用的表, ...

  6. python web应用_为您的应用选择最佳的Python Web爬网库

    python web应用 Living in today's world, we are surrounded by different data all around us. The ability ...

  7. 近似算法的近似率_选择最佳近似最近算法的数据科学家指南

    近似算法的近似率 by Braden Riggs and George Williams (gwilliams@gsitechnology.com) Braden Riggs和George Willi ...

  8. aws lambda使用_如何使用AWS Lambda为发布/订阅消息选择最佳事件源

    aws lambda使用 by Yan Cui 崔燕 如何使用AWS Lambda为发布/订阅消息选择最佳事件源 (How to choose the best event source for pu ...

  9. 交叉验证选择最佳参数_如何为您的公司选择最佳的身份验证即服务提供商

    交叉验证选择最佳参数 by Jeff Okawa 通过Jeff Okawa 如何为您的公司选择最佳的身份验证即服务提供商 (How to choose the best Authentication ...

  10. 切削为什么没有切屑_数控机床如何选择最佳切削刀具?都有哪些小技巧?

    机加工前沿 订单 | 技术 | 干货 | 社群 关注可加入机械行业群! 关注 选择最佳切削刀具对机加工生产企业的成功至关重要.这也是一项不断反复的工作,并将直接影响到产品加工周期及工厂竞争力. 一家刀 ...

最新文章

  1. PLM在企业中的实际价值与意义
  2. deepin下载软件慢切换镜像
  3. 【干货】SqlServer 总结几种存储过程分页的使用
  4. 为什么程序员不擅长评估开发时间?(转)
  5. 神策数据首度公开「电商行业事件设计埋点模板」
  6. Hadoop1.2.1集群安装二
  7. hive mysql编码问题_Hive中文乱码 生产环境问题解决
  8. linux——回射服务器
  9. 计算机c语言模拟考试,国家计算机二级c语言考试模拟题
  10. php日历排班表,日历排班表软件下载
  11. 未来教育2019年计算机三级数据库,2019年计算机三级数据库考试强化试题及答案012...
  12. python必背代码-Python一些实用代码
  13. ip地址聚合后可用地址数 计算机网络技术三级考试 备考
  14. 单片机与触摸屏通信c语言,讲述如何实现单片机与触摸屏的通信
  15. 2021年中国云游戏产业发展环境(PEST)分析:中国云游戏服务拥有光明前景[图]
  16. cdr2022更新24.1版CorelDRAW2022稳定版
  17. 如何制定人生目标体系
  18. 流量回放框架jvm-sandbox-repeater的实践
  19. 纠结了五年,华为要动智能电视了? 1
  20. kubeadm修改默认证书有效期,解决证书过期问题

热门文章

  1. 印度体育教育初创公司 KOOH Sports 获得 220 万美元风险投资
  2. rhcsa第二天作业9道题
  3. OV9281+RK3399Pro 双摄像头移植
  4. ubuntu18.04键盘背光灯以及Scroll Lock建失效
  5. 止增笑耳的星际迷航前传
  6. 解决XML转JSON串时报错:Exception in thread main java.lang.NoClassDefFoundError: nu/xom/Serializer
  7. WAP技术与应用(转)
  8. win7无损合并分区,win7合并磁盘分区
  9. python对京东评论的爬取_python爬取京东评论(三)
  10. Python Pymysql实现数据存储