Luogu单源最短路径模版题
dijkstra

  1. #include<cstdio>
  2. #include<vector>
  3. using namespace std;
  4. const int oo=0xfffff;
  5. struct data
  6. {
  7. int to,val;
  8. };
  9. vector<data> edge[10001];
  10. bool visit[10001];
  11. int cost[10001],n,m,s;
  12. void add(int a,int b,int val)
  13. {
  14. data tmp;
  15. tmp.to=b;
  16. tmp.val=val;
  17. edge[a].push_back(tmp);
  18. }
  19. void init()
  20. {
  21. scanf("%d%d%d",&n,&m,&s);
  22. int a,b,val;
  23. for (int i=1;i<=m;i++)
  24. {
  25. scanf("%d%d%d",&a,&b,&val);
  26. add(a,b,val);
  27. }
  28. }
  29. void first()
  30. {
  31. for (int i=1;i<=n;i++) cost[i]=oo;
  32. cost[s]=0;
  33. }
  34. void dijkstra()
  35. {
  36. for (int i=1;i<=n;i++)
  37. {
  38. int mincost=oo,mini;
  39. for (int j=1;j<=n;j++)
  40. {
  41. if (!visit[j]&&mincost>cost[j])
  42. {
  43. mincost=cost[j];
  44. mini=j;
  45. }
  46. }
  47. visit[mini]=true;
  48. int len=edge[mini].size();
  49. for (int j=0;j<len;j++)
  50. cost[edge[mini][j].to]=min(cost[edge[mini][j].to],mincost+edge[mini][j].val);
  51. }
  52. }
  53. int main()
  54. {
  55. init();
  56. first();
  57. dijkstra();
  58. for (int i=1;i<=n;i++)
  59. if (cost[i]!=0xfffff) printf("%d ",cost[i]);
  60. else printf("%d ",2147483647);
  61. return 0;
  62. }

bellman_ford

  1. #include<cstdio>
  2. #include<vector>
  3. using namespace std;
  4. const int oo=0xfffff;
  5. struct data
  6. {
  7. int str,to,val;
  8. };
  9. vector<data> e;
  10. bool visit[10001];
  11. int cost[10001],n,m,s;
  12. void add(int a,int b,int val)
  13. {
  14. data tmp;
  15. tmp.str=a;
  16. tmp.to=b;
  17. tmp.val=val;
  18. e.push_back(tmp);
  19. }
  20. void init()
  21. {
  22. scanf("%d%d%d",&n,&m,&s);
  23. int a,b,val;
  24. for (int i=1;i<=m;i++)
  25. {
  26. scanf("%d%d%d",&a,&b,&val);
  27. add(a,b,val);
  28. }
  29. }
  30. void first()
  31. {
  32. for (int i=1;i<=n;i++) cost[i]=oo;
  33. cost[s]=0;
  34. }
  35. void bellman_ford()
  36. {
  37. for (int i=1;i<=n;i++)
  38. {
  39. bool flag=false;
  40. for (int j=0;j<m;j++)
  41. {
  42. if (cost[e[j].to]>cost[e[j].str]+e[j].val)
  43. {
  44. flag=true;
  45. cost[e[j].to]=cost[e[j].str]+e[j].val;
  46. }
  47. }
  48. if (!flag) break;
  49. }
  50. }
  51. int main()
  52. {
  53. init();
  54. first();
  55. bellman_ford();
  56. for (int i=1;i<=n;i++)
  57. if (cost[i]!=0xfffff) printf("%d ",cost[i]);
  58. else printf("%d ",2147483647);
  59. return 0;
  60. }

SPFA

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<vector>
  4. using namespace std;
  5. struct data
  6. {
  7. int e,v;
  8. };
  9. vector<data> a[500001];
  10. int n,m,f,g,s,w,que[10001],cost[10001];
  11. bool visit[10001];
  12. void add(int sta,int end,int val)
  13. {
  14. data temp;
  15. temp.e=end;temp.v=val;
  16. a[sta].push_back(temp);
  17. }
  18. void SPFA()
  19. {
  20. int head=0,tail=1,mod=n+1;
  21. que[head]=s;
  22. while (head!=tail)
  23. {
  24. int t=que[head];
  25. for (int i=0;i<a[t].size();i++)
  26. {
  27. if (cost[t]+a[t][i].v<cost[a[t][i].e])
  28. {
  29. if (!visit[a[t][i].e])
  30. {
  31. que[tail]=a[t][i].e;
  32. tail++;
  33. tail%=mod;
  34. visit[a[t][i].e]=true;
  35. }
  36. cost[a[t][i].e]=cost[t]+a[t][i].v;
  37. }
  38. }
  39. head++;
  40. head%=mod;
  41. visit[t]=0;
  42. }
  43. }
  44. void First()
  45. {
  46. for (int i=1;i<=n;i++) cost[i]=2147483647;
  47. cost[s]=0;
  48. }
  49. int main()
  50. {
  51. cin>>n>>m>>s;
  52. for (int i=1;i<=m;i++)
  53. {
  54. cin>>f>>g>>w;
  55. add(f,g,w);
  56. }
  57. First();
  58. SPFA();
  59. for (int i=1;i<=n;i++) cout<<cost[i]<<" ";
  60. return 0;
  61. }

【2018寒假集训Day 7】【最短路径】三种算法的模板的更多相关文章

  1. 最短路问题的三种算法&模板

    最短路算法&模板 最短路问题是图论的基础问题.本篇随笔就图论中最短路问题进行剖析,讲解常用的三种最短路算法:Floyd算法.Dijkstra算法及SPFA算法,并给出三种算法的模板.流畅阅读本 ...

  2. c语言求回文数的三种算法的描述

    c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...

  3. Java利用DES/3DES/AES这三种算法分别实现对称加密

    转载地址:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了 ...

  4. 内存分配---FF、BF、WF三种算法

    动态分区分配是根据进程的实际需要,动态的为之分配内存空间.而在实现可变分区分配时,将涉及到分区分配中 所用的数据结构.分区分配算法和分区的分配与内存回收的过程. 分区分配中的数据结构:(1)描述空闲块 ...

  5. 图文实例解析,InnoDB 存储引擎中行锁的三种算法

    前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁.具体来说,InnoDB 采用的是两阶段锁定协议(tw ...

  6. 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人

    蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...

  7. 求最短路径的三种算法: Ford, Dijkstra和Floyd

    Bellman-Ford算法 Bellman-Ford是一种容易理解的单源最短路径算法, Bellman-Ford算法需要两个数组进行辅助: dis[i]: 存储顶点i到源点已知最短路径 path[i ...

  8. 洛谷2018寒假集训tg第二次比赛第二题Princess Principal题解

    这算不算泄题啊...被kkk发现会咕咕咕吧. 题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r.问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Ch ...

  9. 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)

    花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...

随机推荐

  1. redis集群之Codis

    在大数据高并发场景下,单个 Redis 实例往往会显得捉襟见肘.首先体现在内存上,单个 Redis 的内存不宜过大,内存太大会导致 rdb 文件过大,进一步导致主从同步时全量同步时间过长,在实例重启恢 ...

  2. JS-SDK

    1. 签名 ​ 看到网上的大部分问题都集中在签名部分,请大家一定请熟读微信JS-SDK说明文档附录5-常见错误及解决方法 部分. 注意 在计算签名的过程中,如果url总是不对请 实验 首页的url或 ...

  3. day20作业

    1.下面这段代码的输出结果将是什么?请解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): ...

  4. Nginx在Window上简单的使用

    先上Nginx在Window上的基本常用指令: IP_hase也可以解决Session共享的问题:不过不推荐这样使用,建议使用 Memcache/redis来处理 session共享的问题 轮询还是权 ...

  5. Alpha阶段--第七周Scrum Meeting

    任务内容 本次会议为第六周的Scrum Meeting会议 召开时间为周日下午5点,在潮音餐厅召开,召开时间约为30分钟,对已经完成项目的总结和对今后项目设计的展望 队员 任务 张孟宇 “我的”界面代 ...

  6. egg 框架自动创建数据库表结构

    // {app_root}/app.js module.exports = app => { app.beforeStart(async () => { // 从配置中心获取 MySQL ...

  7. MySQL计划任务(事件调度器)

    原文:http://www.cnblogs.com/c840136/articles/2388512.html 备忘; MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件.定时任务 ...

  8. redis入门(三)

    目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...

  9. Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现

    Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现  一.     漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-0232,危险级别:高危,CVSS分值:官方 ...

  10. SVD分解

    首先,有y = AX,将A看作是对X的线性变换 但是,如果有AX = λX,也就是,A对X的线性变换,就是令X的长度为原来的λ倍数. *说起线性变换,A肯定要是方阵,而且各列线性无关.(回想一下,A各 ...