spaf的双端队列优化:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. const ll maxn=210000;
  4. using namespace std;
  5. ll n,m,s,tot,link[maxn],dis[maxn],vis[maxn];
  6. struct bian
  7. {
  8. ll y,v,next;
  9. };
  10. bian a[maxn];
  11. inline void add(ll x,ll y,ll v)
  12. {
  13. a[++tot].y=y;
  14. a[tot].v=v;
  15. a[tot].next=link[x];
  16. link[x]=tot;
  17. }
  18. inline void spaf()
  19. {
  20. memset(dis,127,sizeof(dis));
  21. deque<ll>q;
  22. q.push_front(s);
  23. dis[s]=0;vis[s]=1;
  24. while(!q.empty())
  25. {
  26. ll x=q.front();q.pop_front();vis[x]=0;
  27. for(int i=link[x];i;i=a[i].next)
  28. {
  29. int y=a[i].y;
  30. if(dis[y]>dis[x]+a[i].v)
  31. {
  32. dis[y]=dis[x]+a[i].v;
  33. if(!vis[y])
  34. {
  35. if(!q.size()||dis[y]>dis[q.front()]) q.push_back(y);
  36. else q.push_front(y);
  37. vis[y]=1;
  38. }
  39. }
  40. }
  41. }
  42. }
  43. int main()
  44. {
  45. freopen("1.in","r",stdin);
  46. cin>>n>>m>>s;
  47. for(int i=1;i<=m;i++)
  48. {
  49. ll x,y,v;
  50. cin>>x>>y>>v;
  51. add(x,y,v);
  52. }
  53. spaf();
  54. for(int i=1;i<=n;i++) cout<<dis[i]<<' ';
  55. return 0;
  56. }

dijkstra:

  1. inline void dij()
  2. {
  3. memset(dis,127,sizeof(dis));
  4. dis[1]=0;
  5. q.push(make_pair(0,1));
  6. while(!q.empty())
  7. {
  8. ll x=q.top().second;q.pop();
  9. if(vis[x]) continue;
  10. vis[x]=1;
  11. for(int i=link[x];i;i=a[i].next)
  12. {
  13. ll y=a[i].y;
  14. if(dis[y]>dis[x]+a[i].v)
  15. {
  16. dis[y]=dis[x]+a[i].v;
  17. q.push(make_pair(-dis[y],y));
  18. }
  19. }
  20. }
  21. }

用dijkstra的最短路计数:

  1. inline void dij()
  2. {
  3. memset(dis,127,sizeof(dis));
  4. c[1]=1;dis[1]=0;
  5. q.push(make_pair(0,1));
  6. while(!q.empty())
  7. {
  8. ll x=q.top().second;q.pop();
  9. if(vis[x]) continue;
  10. vis[x]=1;
  11. for(int i=link[x];i;i=a[i].next)
  12. {
  13. ll y=a[i].y;
  14. if(dis[y]==dis[x]+a[i].v) c[y]=c[x]+c[y];
  15. if(dis[y]>dis[x]+a[i].v)
  16. {
  17. dis[y]=dis[x]+a[i].v;
  18. q.push(make_pair(-dis[y],y));
  19. c[y]=c[x];
  20. }
  21. }
  22. }
  23. }

最短路spaf及dijkstra模板的更多相关文章

  1. HDU-2544 最短路 Dijkstra模板题

    题目链接:https://vjudge.net/problem/HDU-2544 题意: 题目要求找到节点1到节点n之间的一条最短路 分析: Dijkstra模板题 单源最短路径,可以用dijkstr ...

  2. 单源最短路——Dijkstra模板

    算法思想: 类似最小生成树的贪心算法,从起点 v0 每次新拓展一个距离最小的点,再以这个点为中间点,更新起点到其他点的距离. 算法实现: 需要定义两个一维数组:①vis[ i ] 表示是否从源点到顶点 ...

  3. 【hdu 2544最短路】【Dijkstra算法模板题】

    Dijkstra算法 分析 Dijkstra算法适用于边权为正的情况.它可用于计算正权图上的单源最短路( Single-Source Shortest Paths, SSSP) , 即从单个源点出发, ...

  4. HDU 2544 最短路 【Dijkstra模板题】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路:最短路的模板题 Dijkstra 算法是一种类似于贪心的算法,步骤如下: 1.当到一个点时, ...

  5. Dijkstra 模板 最短路

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents ------------------------------------------ ...

  6. HDU 2544最短路dijkstra模板题

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. uva 11374 最短路+记录路径 dijkstra最短路模板

    UVA - 11374 Airport Express Time Limit:1000MS   Memory Limit:Unknown   64bit IO Format:%lld & %l ...

  8. 最短路(Dijkstra模板题)

    就不写题目链接了 Sample Input 5 5 点个数a,边个数b 1 2 20 点,点,权值 2 3 30 3 4 20 4 5 20 1 5 100 求出1到a的最短距离 Sample Out ...

  9. HDU 2544 - 最短路 - [堆优化dijkstra][最短路模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 Time Limit: 5000/1000 MS (Java/Others) Memory Li ...

随机推荐

  1. 离散化模板题 II ——重复元素离散化后的数字不相同

    离散化模板题 II --重复元素离散化后的数字不相同 题目描述 现有数列A1, A2, ⋯, An,数列中可能有重复元素. 现在要求输出该数列的离散化数列,重复元素离散化后的数字不相同. 输入 第一行 ...

  2. Android View post 方法

    解析View.post方法.分析一下这个方法的流程. 说起post方法,我们很容易联想到Handler的post方法,都是接收一个Runnable对象.那么这两个方法有啥不同呢? Handler的po ...

  3. PHP中的日期相关函数(三)

    之前我们已经介绍过了 PHP 的一些相关的日期操作对象,今天我们就来学习剩下的那些面向过程的使用方式.当然,如果是和 DateTime 类中相似的方法我们就不再进行介绍了.另外,Date() 和 ti ...

  4. mysql将数据导入到另外一张操作

    insert into ydcq_member_class (ClassId,signcount,UserId) select 64,2,`员工编号` from `学员名单`

  5. nginx 常用x代码

    1.nginx 禁止ip直接访问,只允许域名访问,直接在.conf文件里 server上面再添加一个server 代码,不可以写同一个server里: server { listen 80 defau ...

  6. python3中文乱码解决方法

    解决方法: 修改pycharm配置: File->Settings->Editor->File encodings 把Global encoding设置成GBK即可

  7. prometheus+grafana实现服务监控

    一.安装prometheus: 下载相应的版本 :https://prometheus.io/download/ 解压: Linux:tar -zxvf XXX.tar.gz windows:直接下载 ...

  8. Java面试总结 Boss沟通过:500+,面试:20,已投简历130+

    1 概述 1 介绍 最近换工作,对最近面试的过程进行总结,总结每个公司的面试流程和问到的面试题,记录自己,也供大家参考. 我是一名Java开发,工作经验10年,所以面试一名高级Java开发工程师. 简 ...

  9. python3使用imaplib获取邮件

    imaplib 获取邮件,email解析邮件config文件中存有路径 1 # config.py 2 FILE_PATH_PREFIX = os.getcwd() + '/static/' 3 FI ...

  10. P6672-[清华集训2016]你的生命已如风中残烛【结论】

    正题 题目链接:https://www.luogu.com.cn/problem/P6672 题目大意 长度为\(m\)的序列\(a\),有\(n\)个数字不是\(0\),其他\(m-n\)个是\(0 ...