随手一打就是标准的SPFA,默认1号节点为出发点,当然不用 f 判断是否在队里也可以,只是这样更优化一点

  1. void spfa()
  2. {
  3. int i,x,k;
  4. for (i=;i<=n;i++)
  5. {
  6. d[i]=oo;
  7. f[i]=;
  8. }
  9. d[]=;
  10. q.push();
  11. while (!q.empty())
  12. {
  13. x=q.front();
  14. q.pop();
  15. f[x]=;
  16. for (i=first[x];i;i=next[i])
  17. {
  18. k=v[i];
  19. if (d[k]>d[x]+w[i])
  20. {
  21. d[k]=d[x]+w[i];
  22. if (f[k])
  23. {
  24. q.push(k);
  25. f[k]=;
  26. }
  27. }
  28. }
  29. }
  30. }

  Dijkstra+堆优化,调了我3个多小时终于调到正确的最优的模板

  1. void down(int x)
  2. {
  3. x<<=;
  4. if (x>t) return;
  5. if (x<t&&d[s[x+]]<d[s[x]]) x++;
  6. if (d[s[x]]>=d[s[x>>]]) return;
  7. swap(s[x],s[x>>]);
  8. swap(p[s[x]],p[s[x>>]]);
  9. down(x);
  10. }
  11. void up(int x)
  12. {
  13. if (x==||d[s[x>>]]<=d[s[x]]) return;
  14. swap(s[x],s[x>>]);
  15. swap(p[s[x]],p[s[x>>]]);
  16. up(x>>);
  17. }
  18. void dijkstra()
  19. {
  20. int i,x,k;
  21. t=s[]=;
  22. for (i=;i<=n;i++) d[i]=oo;
  23. while (t)
  24. {
  25. x=s[];
  26. s[]=s[t--];
  27. p[s[]]=;
  28. p[x]=-;
  29. down();
  30. for (i=first[x];i;i=next[i])
  31. {
  32. k=v[i];
  33. if (p[k]==-) continue;
  34. if (!p[k])
  35. {
  36. s[++t]=k;
  37. p[k]=t;
  38. }
  39. if (d[k]>d[x]+w[i])
  40. {
  41. d[k]=d[x]+w[i];
  42. up(p[k]);
  43. }
  44. }
  45. }
  46. }

单源最短路模板_SPFA_Dijkstra(堆优化)_C++的更多相关文章

  1. 单源最短路——朴素Dijkstra&堆优化版

    朴素Dijkstra 是一种基于贪心的算法. 稠密图使用二维数组存储点和边,稀疏图使用邻接表存储点和边. 算法步骤: 1.将图上的初始点看作一个集合S,其它点看作另一个集合 2.根据初始点,求出其它点 ...

  2. 单源最短路模板(dijkstra)

    单源最短路(dijkstra算法及堆优化) 弱化版题目链接 n^2 dijkstra模板 #include<iostream> #include<cstdio> #includ ...

  3. 单源最短路模板 + hdu - 2544

    Floyd Floyd 本质上类似一种动态规划,dp [ i ] [ j ] = dp [ i ] [ k ] + dp[ k ] [ j ]. /** * Night gathers, and no ...

  4. 【单源最短路模板】 poj 2387

    #include <cstdio> #include <iostream> #include <stdlib.h> #include <memory.h> ...

  5. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

  6. [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)

    Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...

  7. 模板C++ 03图论算法 1最短路之单源最短路(SPFA)

    3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...

  8. 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结

    刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...

  9. 单源最短路_SPFA_C++

    当我们需要求一个点到其它所有点的最短路时,我们可以采用SPFA算法 代码特别好写,而且可以有环,但是不能有负权环,时间复杂度是O(α(n)n),n为边数,α(n)为n的反阿克曼函数,一般小于等于4 模 ...

随机推荐

  1. Apache 服务器性能评估

    1 查看当前并发连接数 netstat -an | grep ESTABLISHED | wc -l 2 查看当前进程数 ps aux|grep httpd|wc -l

  2. 最后一片蓝海的终极狂欢-写在Win10发布前夕

    作为一名Windows8.x+系统平台从业者,从工作伊始,耳边不断充斥着Windows将走向没落的言论,Win10今日晚些时候即将发布,笔者借此机会,说说自己的看法. 早在2012年的时候,IDC曾预 ...

  3. NMON记录服务器各项性能数据

    1.将下载下来的nmon文件通过ftp传入服务器下,将nmon权限全开chmod +x nmon 2.查看nmon可以看到如下内容 查看各项指标 输入C,CPU数据 M,内存 N,网络 D,磁盘 T, ...

  4. CodeForces-1132F Clear the String

    题目链接 https://vjudge.net/problem/CodeForces-1132F 题面 Description You are given a string \(s\) of leng ...

  5. pandas DataFrame行或列的删除方法

    pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...

  6. shell功能

    日志切割: function rotate() { logs_path=$ echo Rotating Log: $ cp ${logs_path} ${logs_path}.$(date -d &q ...

  7. 数据结构14——AC自动机

    一.相关介绍 知识要求 字典树Trie KMP算法 AC自动机 多模式串的字符匹配算法(KMP是单模式串的字符匹配算法) 单模式串问题&多模式串问题 单模就是给你一个模式串,问你这个模式串是否 ...

  8. 【Linux】如何设置Linux开机 ,默认进入图形界面或命令行界面?

    原创链接: https://blog.csdn.net/prophet10086/article/details/78501019 [7版本] 在root用户权限下: 查看当前启动模式 systemc ...

  9. Pandoc中的Markdown语法

    概述 Pandoc中支持扩展修订版本的Markdown语法 使用pandoc中支持的Markdown语法用 -f markdown 使用标准Markdown语法用 -f markdown_strict ...

  10. Java中break和continue的区别

    continue,继续下一个循环的运算, break,跳出循环