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-表单之新增字段和设置css属性(四)

    要注意是模板元素 和 表单元素的对应.

  2. django-模型之从数据库获取数据(二)

    1.获取一条数据(字段值必须唯一) 2.条件查询filter 3.排除查询exclude 4.链式查询 5.查询后进行排序order_by 6.按字段查询values 7.插入数据create 8.数 ...

  3. 设计模式C++描述----03.工厂(Factory)模式

    工厂模式属于创建型模式,大致可以分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 一. 简单工厂模式 简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品.当增加新的产品时,就需要 ...

  4. 解决SAP740 GUI 搜索帮助(F4)回填值乱码的问题

    SAP 740客户端引入了搜索帮助增强功能,并且默认是开启该功能的,在带有F4搜索帮助的字段输入框中输入字段的前两个字符,可以自动以下拉框的方式带出包含包含所输入字符的条目,从而实现快速的输入帮助,如 ...

  5. CSPS模拟 63

    每天都考试都快傻了O_o $T1 Median$ 一看就不能从通项上下手.. 那么就是..给你一个序列..区间中位数.. 对顶堆! 爆调2h,心态炸裂. 据说根据鬼畜的函数定义和$mod<=le ...

  6. 无聊的 邮递员 插头dp

    邮递员想知道,如果他每天都用不同路线走过10×20个点阵邮筒,他必须活过多少个世纪才能走遍所有方案? 7:00 改完T1,开始肝插头dp 7:10 放弃,颓博客 7:20 学习插头dp 7:21 放弃 ...

  7. Apache+Tomcat负载均衡

    参考:http://www.cnblogs.com/fly_binbin/p/3881207.html 反向代理负载均衡 (Apache2+Tomcat7/8)  使用代理服务器可以将请求转发给内部的 ...

  8. NOIP模拟赛 华容道 (搜索和最短路)蒟蒻的第一道紫题

    题目描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 B 玩的华容道 ...

  9. 数据可视化:绘图库-Matplotlib

    为什么要绘图? 一个图表数据的直观分析,下面先看一组北京和上海上午十一点到十二点的气温变化数据: 数据: 这里我用一段代码生成北京和上海的一个小时内每分钟的温度如下: import random co ...

  10. Abp vNext 自定义 Ef Core 仓储引发异常

    问题 在使用自定义 Ef Core 仓储和 ABP vNext 注入的默认仓储时,通过两个 Repository 进行 Join 操作,提示 Cannot use multiple DbContext ...