Luogu单源最短路径模版题
dijkstra

#include<cstdio>
#include<vector>
using namespace std;
const int oo=0xfffff;
struct data
{
int to,val;
};
vector<data> edge[10001];
bool visit[10001];
int cost[10001],n,m,s;
void add(int a,int b,int val)
{
data tmp;
tmp.to=b;
tmp.val=val;
edge[a].push_back(tmp);
}
void init()
{
scanf("%d%d%d",&n,&m,&s);
int a,b,val;
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&val);
add(a,b,val);
}
}
void first()
{
for (int i=1;i<=n;i++) cost[i]=oo;
cost[s]=0;
}
void dijkstra()
{
for (int i=1;i<=n;i++)
{
int mincost=oo,mini;
for (int j=1;j<=n;j++)
{
if (!visit[j]&&mincost>cost[j])
{
mincost=cost[j];
mini=j;
}
}
visit[mini]=true;
int len=edge[mini].size();
for (int j=0;j<len;j++)
cost[edge[mini][j].to]=min(cost[edge[mini][j].to],mincost+edge[mini][j].val);
}
}
int main()
{
init();
first();
dijkstra();
for (int i=1;i<=n;i++)
if (cost[i]!=0xfffff) printf("%d ",cost[i]);
else printf("%d ",2147483647);
return 0;
}

bellman_ford

#include<cstdio>
#include<vector>
using namespace std;
const int oo=0xfffff;
struct data
{
int str,to,val;
};
vector<data> e;
bool visit[10001];
int cost[10001],n,m,s;
void add(int a,int b,int val)
{
data tmp;
tmp.str=a;
tmp.to=b;
tmp.val=val;
e.push_back(tmp);
}
void init()
{
scanf("%d%d%d",&n,&m,&s);
int a,b,val;
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&val);
add(a,b,val);
}
}
void first()
{
for (int i=1;i<=n;i++) cost[i]=oo;
cost[s]=0;
}
void bellman_ford()
{
for (int i=1;i<=n;i++)
{
bool flag=false;
for (int j=0;j<m;j++)
{
if (cost[e[j].to]>cost[e[j].str]+e[j].val)
{
flag=true;
cost[e[j].to]=cost[e[j].str]+e[j].val;
}
}
if (!flag) break;
}
}
int main()
{
init();
first();
bellman_ford();
for (int i=1;i<=n;i++)
if (cost[i]!=0xfffff) printf("%d ",cost[i]);
else printf("%d ",2147483647);
return 0;
}

SPFA

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
struct data
{
int e,v;
};
vector<data> a[500001];
int n,m,f,g,s,w,que[10001],cost[10001];
bool visit[10001];
void add(int sta,int end,int val)
{
data temp;
temp.e=end;temp.v=val;
a[sta].push_back(temp);
}
void SPFA()
{
int head=0,tail=1,mod=n+1;
que[head]=s;
while (head!=tail)
{
int t=que[head];
for (int i=0;i<a[t].size();i++)
{
if (cost[t]+a[t][i].v<cost[a[t][i].e])
{
if (!visit[a[t][i].e])
{
que[tail]=a[t][i].e;
tail++;
tail%=mod;
visit[a[t][i].e]=true;
}
cost[a[t][i].e]=cost[t]+a[t][i].v;
}
}
head++;
head%=mod;
visit[t]=0;
}
}
void First()
{
for (int i=1;i<=n;i++) cost[i]=2147483647;
cost[s]=0;
}
int main()
{
cin>>n>>m>>s;
for (int i=1;i<=m;i++)
{
cin>>f>>g>>w;
add(f,g,w);
}
First();
SPFA();
for (int i=1;i<=n;i++) cout<<cost[i]<<" ";
return 0;
}

【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. django-URL认识(一)

    URL由三部分组成:资源类型.存放资源的主机域名.资源文件名.也可认为由4部分组成:协议.主机.端口.路径 URL的一般语法格式为:(带方括号[]的为可选项): protocol :// hostna ...

  2. 在docker中创建使用MySQL,并实现远程连接navicat

    在 docker 中使用 mysql 安装完docker之后,在命令行中输入docker images可以查看自己创建的image(安装下载docker的教程很多了,大家需要可以去查一下就可以了)这里 ...

  3. Java 中文数字转换为阿拉伯数字

    贴出代码,方便学习交流,稍后放出镜像问题的代码 package com.thunisoft.cail.utils; import com.sun.istack.internal.NotNull; im ...

  4. C++学习笔记9_异常处理

    异常处理 int divide(int a,int b) { if(b==0) { return -1;//然而,10,-10也是结果-1,所以要抛出异常了 } } //在异常不能通过返回值表示,也不 ...

  5. RocketMQ 消息发送system busy、broker busy原因分析与解决方案

    目录 1.现象 2.原理解读 2.1 RocketMQ 网络处理机制概述 2.2 pair.getObject1().rejectRequest() 2.3 漫谈transientStorePoolE ...

  6. 如何实现一个MVVM

    说一说我对于mvvm模型的理解吧 我第一次接触mvvm也是在学习vue的时候,在我看来vue和react都是数据驱动视图,但是vue属于标准的mvvm模型,react是从组件化演变而来 不多废话,直接 ...

  7. dp的林林总总(持续更新,dp骚气解法等等)

    写在前面: 本人dp较弱,所以总结了一些坑点,转化思路以供复习使用,勿喷,甚至一些不是dp的题(贪心等等)也会放在这. 每个点后面会有我自己的题解,如果没有链接,向下找第一个链接,可能会有多题. 1. ...

  8. day8-函数

    ---def test(x): # def:定义函数的关键字,test:函数名, x相当于以前函数中的自变量使用函数的好处:1.代码重用2.保持一致性,易于维护3.可扩展性 def test(x): ...

  9. node.js评论列表和添加购物车数据库表创建

    2.1:评论列表--发表评论 用户点击新闻列表某一条新闻,看到新闻详细发表评论 -用户输入评论内容 -发表评论 [将用户评论内容保存数据库 xz_comment] 2.2:评论列表--发表评论-开发评 ...

  10. 手把手教你用netty撸一个ZkClient

    原文地址: https://juejin.im/post/5dd296c0e51d4508182449a6 前言 有这个想法的缘由是前一阵子突发奇想, 想尝试能不能直接利用js连接到zookeeper ...