题目比较简单,讲两种做法

法一、二都是用的朴素dijkstra算法

法一:反向建图 求终点s到每个起点的最短距离 O(T * (n^2 + n))(T表示多组测试数据)820ms

#include <bits/stdc++.h>using namespace std;
const int N = 1010, M = 2e4+10;
#define inf 0x3f3f3f3f
int g[N][N], dist[N];
bool st[N];
int n, m, s;
int w;
int W[N];int dijk(int s){memset(dist, 0x3f, sizeof dist);memset(st, false, sizeof st);dist[s] = 0;for(int i=0;i<n;++i){int t = -1;for(int j=1;j<=n;++j){if(!st[j]&&(dist[t]>dist[j]||t==-1)){t = j;}}st[t] = true;for(int j=1;j<=n;++j){dist[j] = min(dist[j], dist[t] + g[t][j]);}}int res = inf;for(int i=0;i<w;++i){res = min(res, dist[W[i]]);//求终点s到所有起点最短路的最小值}return res;
}int main()
{while(cin>>n>>m>>s){memset(g, 0x3f, sizeof g);for(int i=0;i<m;++i){int p, q, t;cin>>p>>q>>t;g[q][p] = min(g[q][p], t);//注意是反向建图,加入的边就要反转}cin>>w;for(int i=0;i<w;++i) cin>>W[i];int ans = dijk(s);if(ans==inf) cout<<-1<<endl;else cout<<ans<<endl;}return 0;
}

法二 设置虚拟源点 求虚拟源点到终点s的最短距离 O(T * n^2) 339ms

#include <bits/stdc++.h>using namespace std;
const int N = 1010;
#define inf 0x3f3f3f3f
int g[N][N], dist[N];
bool st[N];
int n, m, s;
int w;
int W[N];int dijk(int s){memset(dist, 0x3f, sizeof dist);memset(st, false, sizeof st);dist[0] = 0;//由于加了一个点,因此每个for循环的次数都要加一for(int i=0;i<n+1;++i){int t = -1;for(int j=0;j<=n;++j){if(!st[j]&&(dist[t]>dist[j]||t==-1)){t = j;}}st[t] = true;for(int j=0;j<=n;++j){dist[j] = min(dist[j], dist[t] + g[t][j]);}}return dist[s];//返回虚拟源点到终点s的最短距离
}int main()
{while(~scanf("%d%d%d", &n, &m, &s)){memset(g, 0x3f, sizeof g);for(int i=0;i<m;++i){int p, q, t;scanf("%d%d%d", &p, &q, &t);g[p][q] = min(g[p][q], t);}scanf("%d", &w);for(int i=0;i<w;++i) scanf("%d", &W[i]), g[0][W[i]] = 0;//将虚拟源点到起点的距离都设置为0,因此所有起点到终点的最短路径就是虚拟源点到终点的最短路int ans = dijk(s);if(ans==inf) printf("-1\n");else printf("%d\n" ,ans);}return 0;
}

AcWing 1137. Choose the best route(朴素dijkstra反向建图 or 虚拟源点法)相关推荐

  1. Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))

    题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...

  2. POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图

    题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...

  3. 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)

    题干: In the age of television, not many people attend theater performances. Antique Comedians of Mali ...

  4. AcWing 4246. 最短路径和(反向建图+链式前向星+堆优化)

    题目连接 https://www.acwing.com/problem/content/description/4249/ http://poj.org/problem?id=1511 思路 其实这道 ...

  5. POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图

    [题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...

  6. [Bzoj4289]PA2012 Tax(Dijkstra+技巧建图)

    Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...

  7. 【Gym - 101986F】Pizza Delivery(Dijkstra最短路,建图方式,反向建图,Tarjan求桥,图论模板)

    题干: 题目大意: 一个有向图,编号1~n的n个点,m条边,规定1为起点,2为终点,问对于每一条边,反转它的方向,最短路会不会发生改变,如果变短了,输出HAPPY,变长了或者到达不了了输出SAD,不变 ...

  8. P1629 邮递员送信-dijkstra+反向建边

    邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点 111.他总共要送 n−1n-1n−1 样东西,其目的地分别是节点 222 到节点 nnn.由于这个城市的交通比较繁忙,因此所有的道路都是单行的 ...

  9. AcWing 1132. 农场派对(最短路反向建边)

    题目链接 https://www.acwing.com/problem/content/1134/ http://poj.org/problem?id=3268 思路 我们想求所有点到x的距离以及x到 ...

最新文章

  1. C语言 · 求矩阵各个元素的和
  2. 一个通俗易懂的HMM例子
  3. php如何做熔断降级,spring cloud 如何实现服务熔断服务降级
  4. 【大话Hibernate】hibernate事务管理
  5. Redis2.6安装报错
  6. python统计汉字字数_Python 统计字数的思路详解
  7. ROS 教程之 navigation :在 catkin 环境下创建costmap layer plugin
  8. java1.8 64位,jdk 1.8 64位 下载_jdk 1.8 64位 官方版_魅蓝下载
  9. uniapp某个页面高度占满写法
  10. MIKE水动力笔记8_冷启动与热启动
  11. 腾讯服务器每秒有2W个QQ号同时上线,找出5min内重新登入的qq号并打印出来。
  12. Windows Message Queue 优先队列
  13. 怎样设置计算机硬盘的空间,如何调整电脑硬盘的分区容量
  14. LFS 11.1 arm64 meson编译失败,libffi路径错误
  15. python 等值线图_如何用Python绘出三值等值线图?
  16. 建筑行业是时候进行平行建造的应用了
  17. 世界星载SAR发展10——RADAR1(1997,美国)
  18. x265-1.8版本-x265.h代码注释
  19. JavaScript——基于原型编程、多范式的动态脚本语言
  20. SQL Server压测工具对比

热门文章

  1. 如何利用CommMonitor串口监控,抓取串口Modbus RTU数据包
  2. 高性能Linux服务器构建实战 服务器安全运维
  3. 2013年软件考试报名
  4. 又一神器!万能网站密码爆破工具
  5. flutter文本展开收起
  6. canvas刻画时间轴
  7. 中国科学院大学和浙大计算机哪个好,近两年生源质量最好的50所大学:国科大第3,浙大不在前10?...
  8. 句子分割 保留标点符号
  9. 计算机启动黑屏不显示桌面图标,win7系统电脑启动开机黑屏不显示只有鼠标图标的解决方法...
  10. 使用CSS3旋转DIV