【2018寒假集训Day 7】【最短路径】三种算法的模板
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】【最短路径】三种算法的模板的更多相关文章
- 最短路问题的三种算法&模板
最短路算法&模板 最短路问题是图论的基础问题.本篇随笔就图论中最短路问题进行剖析,讲解常用的三种最短路算法:Floyd算法.Dijkstra算法及SPFA算法,并给出三种算法的模板.流畅阅读本 ...
- c语言求回文数的三种算法的描述
c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...
- Java利用DES/3DES/AES这三种算法分别实现对称加密
转载地址:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了 ...
- 内存分配---FF、BF、WF三种算法
动态分区分配是根据进程的实际需要,动态的为之分配内存空间.而在实现可变分区分配时,将涉及到分区分配中 所用的数据结构.分区分配算法和分区的分配与内存回收的过程. 分区分配中的数据结构:(1)描述空闲块 ...
- 图文实例解析,InnoDB 存储引擎中行锁的三种算法
前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁.具体来说,InnoDB 采用的是两阶段锁定协议(tw ...
- 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人
蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...
- 求最短路径的三种算法: Ford, Dijkstra和Floyd
Bellman-Ford算法 Bellman-Ford是一种容易理解的单源最短路径算法, Bellman-Ford算法需要两个数组进行辅助: dis[i]: 存储顶点i到源点已知最短路径 path[i ...
- 洛谷2018寒假集训tg第二次比赛第二题Princess Principal题解
这算不算泄题啊...被kkk发现会咕咕咕吧. 题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r.问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Ch ...
- 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)
花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...
随机推荐
- redis集群之Codis
在大数据高并发场景下,单个 Redis 实例往往会显得捉襟见肘.首先体现在内存上,单个 Redis 的内存不宜过大,内存太大会导致 rdb 文件过大,进一步导致主从同步时全量同步时间过长,在实例重启恢 ...
- JS-SDK
1. 签名 看到网上的大部分问题都集中在签名部分,请大家一定请熟读微信JS-SDK说明文档附录5-常见错误及解决方法 部分. 注意 在计算签名的过程中,如果url总是不对请 实验 首页的url或 ...
- day20作业
1.下面这段代码的输出结果将是什么?请解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): ...
- Nginx在Window上简单的使用
先上Nginx在Window上的基本常用指令: IP_hase也可以解决Session共享的问题:不过不推荐这样使用,建议使用 Memcache/redis来处理 session共享的问题 轮询还是权 ...
- Alpha阶段--第七周Scrum Meeting
任务内容 本次会议为第六周的Scrum Meeting会议 召开时间为周日下午5点,在潮音餐厅召开,召开时间约为30分钟,对已经完成项目的总结和对今后项目设计的展望 队员 任务 张孟宇 “我的”界面代 ...
- egg 框架自动创建数据库表结构
// {app_root}/app.js module.exports = app => { app.beforeStart(async () => { // 从配置中心获取 MySQL ...
- MySQL计划任务(事件调度器)
原文:http://www.cnblogs.com/c840136/articles/2388512.html 备忘; MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件.定时任务 ...
- redis入门(三)
目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...
- Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现
Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现 一. 漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-0232,危险级别:高危,CVSS分值:官方 ...
- SVD分解
首先,有y = AX,将A看作是对X的线性变换 但是,如果有AX = λX,也就是,A对X的线性变换,就是令X的长度为原来的λ倍数. *说起线性变换,A肯定要是方阵,而且各列线性无关.(回想一下,A各 ...