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. Zookeeper与HBase的安装

    一.Zookeeper的安装 1.http://www-us.apache.org/dist/zookeeper/stable/下载Zookeeper安装包,并将zookeeper-3.4.12.ta ...

  2. 2018.8.6 Python中的文件操作

    前言: 使用python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄.然后通过文件句柄就可以进行各种操作了,根据打开方式的不同能够执行的操作也会有相应的差异. 打 ...

  3. Linux的目录介绍

    Linux的目录介绍 Linux系统以目录来组织和管理系统中的所有文件.Linux系统通过目录将系统中所有的文件分级.分层组织在一起,形成了Linux文件系统的树型层次结构.以根目录 “/” 为起点, ...

  4. Centos 7修改hostname浅析

    之前写过一篇博客"深入理解Linux修改hostname",里面总结了RHEL 5.7下面如何修改hostname,当然这篇博客的内容其实也适用于CentOS 6,但是自CentO ...

  5. 机器学习笔记(一)&#183; 感知机算法 &#183; 原理篇

    这篇学习笔记强调几何直觉,同时也注重感知机算法内部的动机.限于篇幅,这里仅仅讨论了感知机的一般情形.损失函数的引入.工作原理.关于感知机的对偶形式和核感知机,会专门写另外一篇文章.关于感知机的实现代码 ...

  6. 如何做seo优化才能获取搜索引擎排名?

    现在网络上有很多网站,但是排名和流量都不理想,所以很多企业会很苦恼.所以我们经常思考如何使网站被搜索引擎喜欢,被用户喜欢,有一个良好的排名和流量? 在这个鱼龙混杂的网络中,seo优化实际上是seo网站 ...

  7. 一个九位数-python

    有一个9位数由1~9的9个数字组成, 每个数字只能出现一次:其第一位能被1整除, 前两位能被2整除, 前三位能被3整除...依次类推,前9位能被9整除.所有的9位数中,只有一个数字满足这些条件,请你输 ...

  8. 小奇的仓库:换根dp

    一道很好的换根dp题.考场上现场yy十分愉快 给定树,求每个点的到其它所有点的距离异或上m之后的值,n=100000,m<=16 只能线性复杂度求解,m又小得奇怪.或者带一个log像kx一样打一 ...

  9. NOIP模拟 16

    嗯我已经是个不折不扣的大辣鸡了 上次的T3就弃了,这次又弃 颓废到天际 T1 巨贪贪心算法 我就是一个只会背板子的大辣鸡 全裸的贪心看不出来,只会打板子 打板子,加特判,然后一无进展,原题不会,这就是 ...

  10. CPU负载和CPU使用率

    参考CSDN博客:https://blog.csdn.net/ffzhihua/article/details/87257607 一.概念(本人理解) CPU负载:平均负载(load average) ...