→原题传送门←
看到题目描述我就知道,这道题不能用SPFA[手动补滑稽]
那么我这道题目采用的是dijkstra算法不了解的去补一下知识哈.
dij的模板:

#include<bits/stdc++.h>
using namespace std;
int dst[5010];
int n,m;
bool s[5010];
int pre[5010];
struct node
{int v,w;node(){}node(int vv,int ww){v=vv,w=ww;}
};
vector<node> g[5010];
void init()
{for(int i=1;i<=5000;i++){dst[i]=0x7f7f7f7f;}
}
int main()
{init();int a,b,c;cin>>n>>m;for(int i=1;i<=m;i++){cin>>a>>b>>c;g[a].push_back(node(b,c));g[b].push_back(node(a,c));}s[1]=1;dst[1]=0;int lasti=1;for(int k=1;k<n;k++){for(int j=0;j<g[lasti].size();j++){int v=g[lasti][j].v,w=g[lasti][j].w;if(!s[v]&&w+dst[lasti]<dst[v]){pre[v]=lasti;dst[v]=w+dst[lasti];}}int min_i=0x7f7f7f7f,min_dst=0x7f7f7f7f;for(int i=1;i<=n;i++){if(!s[i]){if(dst[i]<min_dst){min_dst=dst[i];min_i=i;}}}lasti=min_i;s[min_i]=1;//printf("更新点%d加入,父节点%d\n",lasti,pre[lasti]);}cout<<dst[n]<<endl;return 0;
}

用dijkstra的模板其实得到的dst[i]就是从1出发的最短路,需要修改的地方在于:
第35,36,37的1全部改成给出的start,然后输出优化一下。
可以先去尝试一下修改模板AC这道题,下面会是完整代码,建议不要直接看哈
.
.
.
.
.
.

.
.
.

.
.
.
.

#include<bits/stdc++.h>
using namespace std;
int dst[100010];
int n,m;
bool s[100010];
int pre[100010];
struct node
{int v,w;node(){}node(int vv,int ww){v=vv,w=ww;}
};
vector<node> g[500010];
void init()
{for(int i=1;i<=100000;i++){dst[i]=2147483647;}
}
int main()
{init();int a,b,c,st;cin>>n>>m>>st;for(int i=1;i<=m;i++){cin>>a>>b>>c;g[a].push_back(node(b,c));}s[st]=1;dst[st]=0;int lasti=st;for(int k=1;k<n;k++){for(int j=0;j<g[lasti].size();j++){int v=g[lasti][j].v,w=g[lasti][j].w;if(!s[v]&&w+dst[lasti]<dst[v]){pre[v]=lasti;dst[v]=w+dst[lasti];}}int min_i=2147483647,min_dst=2147483647;for(int i=1;i<=n;i++){if(!s[i]){if(dst[i]<min_dst){min_dst=dst[i];min_i=i;}}}if(min_i<=100009){lasti=min_i;s[min_i]=1;}//printf("更新点%d加入,父节点%d\n",lasti,pre[lasti]);}cout<<dst[1];if(n>1)for(int i=2;i<=n;i++){cout<<" "<<dst[i];}return 0;
}

ov.

转载于:https://www.cnblogs.com/moyujiang/p/11167748.html

【弱化版】【P3371 【模板】单源最短路径(弱化版)】-C++相关推荐

  1. p4779 单源最短路径(标准版)-java版

    传送门: P4779 [模板]单源最短路径(标准版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4779 先给 ...

  2. p3371 单源最短路径(弱化版)-java题解-最短路

    弱化版传送门: P3371 [模板]单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通 ...

  3. P3371 【模板】单源最短路径(弱化版)

    题目 P3371 [模板]单源最短路径(弱化版) 分析 Dijkstra模板题,只不过这里用了链式前向星 AC代码 #include<cstdio> #include<iostrea ...

  4. 洛谷 P3371 【模板】单源最短路径(弱化版)【最短路】【spfa】

    洛谷 P3371 [模板]单源最短路径(弱化版) 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 洛谷 P3371 [模板]单源最短路径(弱化版) ...

  5. 最短路——【模板】单源最短路径(弱化版)(dijkstra)

    题目链接 最短路--[模板]单源最短路径(弱化版)(dijkstra) 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入格式 第一行包含三个整数 n,m,s,分别表示点 ...

  6. 洛谷_P3371 【模板】单源最短路径(弱化版)_dijkstra_堆优化

    洛谷_P3371 [模板]单源最短路径(弱化版)_dijkstra_堆优化 // dijkstra最短路算法_堆优化 #include<bits/stdc++.h> using names ...

  7. P4779 【模板】单源最短路径(标准版)

    # [模板]单源最短路径(标准版) ## 题目背景 2018 年 7 月 19 日,某位同学在 [NOI Day 1 T1 归程](https://www.luogu.org/problemnew/s ...

  8. Luogu 3371【模板】单源最短路径

    Luogu 3371[模板]单源最短路径 第一次写博客用图论题来试一试 接下来是正文部分 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包 ...

  9. 55、【图】Dijkstra求最短路径(单源最短路径+边权重为正数)(C/C++版)

    算法介绍 Dijkstra算法是基于贪心思想,用于实现只含有正权边的单源最短路径问题,单源路径是从一个固定起始点出发到其余各点的路径. 算法过程: 首先,获取起始点到其余点的距离,然后从起始点出发,每 ...

  10. Dijkstra算法求解单源最短路径问题

    文章目录 一 前言 二 Dijkstra 算法讲解 1. 贪心算法的证明 2. 算法实现说明 3. 初版Dijkstra算法代码 三 时间复杂度优化 1. 优化策略 2. 优化后的代码 四 结语 一 ...

最新文章

  1. MinIO分布式专题(第一章、一文教你搭建MinIO单机版)
  2. 关于Android学习
  3. 滑动窗口法LeetCode
  4. opengl es3.0学习篇八:纹理
  5. [转]java 输出流转输入流
  6. 7-1 宿舍谁最高? (20 分)
  7. Linux下汇编语言学习笔记23 ---
  8. 华为交换机做qos案例_华为交换机QoS在企业网络中的应用
  9. fgui的ui管理框架_GitHub - zyswx/DCET: Unity3D客户端和.Net Core服务器双端框架,支持FGUI和双端行为树,支持代码全热更(包括FGUI和行为树)...
  10. 思科网络实验3.5.3 vlan配置故障排除
  11. jQuery实践-别踩白块儿网页版
  12. 王之泰201771010131《面向对象程序设计(java)》第十三周学习总结
  13. thymeleaf中三元运算符嵌套写法
  14. 专科学习计算机应用需要学的课本,计算机应用技术
  15. 2021-06-29 Netkeeper共享网络的思路,适用其他拨号软件
  16. laravel入门教程
  17. 【日常】python站长素材网免费模板下载(以PPT模板为例)
  18. 最全的9款3D建模软件介绍
  19. 蒙特卡洛方法计算圆周率
  20. ES之分析器(Analyzer)

热门文章

  1. ASP.NET网络编程中经常用到的27个函数集
  2. 支付宝人脸数据被共享?李开复道歉
  3. Linux vi/vim 操作命令大全
  4. 计算机专业的书普遍都这么贵,Github上的计算机电子书很多~~~
  5. 如何用WORD制作三线表
  6. mysql数据库开发规范_开发规范——MYSQL数据库
  7. sublime python linux 安装教程,Sublime Text Windows及Linux Python环境搭建
  8. 标定板标定和九点标定的区别_射频导纳物位计的标定方法
  9. suse linux enterprise desktop iso,SUSE Linux Enterprise Desktop 10
  10. python开发效率高吗_提升python开发者工作效率的六个库,你知道几个?