luoguP3371 【模板】单源最短路径
P3371 【模板】单源最短路径
- 3K通过
- 10.7K提交
- 题目提供者 HansBug
- 标签 云端↑
- 难度 普及/提高-
- 时空限制 1s / 128MB
题目描述
如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。
输入输出格式
输入格式:
第一行包含三个整数N、M、S,分别表示点的个数、有向边的个数、出发点的编号。
接下来M行每行包含三个整数Fi、Gi、Wi,分别表示第i条有向边的出发点、目标点和长度。
输出格式:
一行,包含N个用空格分隔的整数,其中第i个整数表示从点S出发到点i的最短路径长度(若S=i则最短路径长度为0,若从点S无法到达点i,则最短路径长度为2147483647)
输入输出样例
4 6 1
1 2 2
2 3 2
2 4 1
1 3 5
3 4 3
1 4 4
0 2 4 3
说明
时空限制:1000ms,128M
数据规模:
对于20%的数据:N<=5,M<=15
对于40%的数据:N<=100,M<=10000
对于70%的数据:N<=1000,M<=100000
对于100%的数据:N<=10000,M<=500000
样例说明:

思路:
一看单源最短路!
我们可以想到两种:1)spfa
2)dijkstra
坑点:
单纯的dijkstra是不能够AC的,需要用STL进行堆优化
上代码:
1)spfa:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
using namespace std; const int N = ;
const int M = ;
int n,m,s;
int h[N],top;
int dis[N];
bool vis[N]; struct E {
int to,next,w;
}t[M]; void add(int u,int v,int w)
{
t[++top].to=v;
t[top].w=w;
t[top].next=h[u];
h[u]=top;
} void spfa(int s)
{
int u,v;
queue<int>q;
dis[s]=,vis[s]=;
q.push(s);
while(!q.empty())
{
u=q.front();
q.pop();
vis[u]=;
for(int i=h[u];i!=-;i=t[i].next)
{
v=t[i].to;
if(dis[u]+t[i].w<dis[v])
{
dis[v]=dis[u]+t[i].w;
if(!vis[v])
{
q.push(v);
vis[v]=;
}
}
}
}
for(int i=;i<=n;i++)
printf("%d ",dis[i]);
} int main()
{
scanf("%d%d%d",&n,&m,&s);
for(int i=;i<=n;i++)
h[i]=-,dis[i]=;
for(int i=,u,v,w;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
spfa(s);
return ;
}
2)dijkstra
#include <iostream>
#include <cstdio>
#include <queue>
#define INF 2147483647
using namespace std; typedef pair<int,int>p;
priority_queue< p,vector <p> ,greater <p> >q;
const int N = ;
const int M = ;
int n,m;
int h[N],top;
int dis[N];
bool vis[N]; struct E {
int to,next,w;
}t[M]; void add(int u,int v,int w)
{
t[++top].to=v;
t[top].w=w;
t[top].next=h[u];
h[u]=top;
} void dijkstra(int s)
{
dis[s]=;
q.push(make_pair(dis[s],s));
while(!q.empty())
{
p tmp=q.top();
q.pop();
int u=tmp.second;
if(vis[u])
continue;
vis[u]=true;
for(int i=h[u];i!=-;i=t[i].next)
{
int v=t[i].to;
if(dis[u]+t[i].w<dis[v])
{
dis[v]=dis[u]+t[i].w;
q.push(make_pair(dis[v],v));
}
}
}
for(int i=;i<=n;i++)
printf("%d ",dis[i]);
} int main()
{
int s;
scanf("%d%d%d",&n,&m,&s);
for(int i=;i<=n;i++)
h[i]=-,dis[i]=INF;
for(int i=,u,v,w;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
dijkstra(s);
return ;
}
luoguP3371 【模板】单源最短路径的更多相关文章
- [模板]单源最短路径(Dijkstra)
如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 主要还是再打一遍最短路,这种算法我用的不多... #include<bits/stdc++.h> using namesp ...
- 【洛谷 p3371】模板-单源最短路径(图论)
题目:给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 解法:spfa算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #in ...
- 洛谷P3371 【模板】单源最短路径
P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...
- Luogu 3371【模板】单源最短路径
Luogu 3371[模板]单源最短路径 第一次写博客用图论题来试一试 接下来是正文部分 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包 ...
- 最短路径 SPFA P3371 【模板】单源最短路径(弱化版)
P3371 [模板]单源最短路径(弱化版) SPFA算法: SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA 最坏情况下复 ...
- P4779 【模板】单源最短路径(标准版)
P4779 [模板]单源最短路径(标准版) 求单源最短路, 输出距离 Solution \(nlogn\) 堆优化 \(Djs\) Code #include<iostream> #inc ...
- 洛谷 P3371 【模板】单源最短路径
P3371 [模板]单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出 ...
- 洛谷 P4779【模板】单源最短路径(标准版)
洛谷 P4779[模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 10 ...
- luoguP4779 【模板】单源最短路径
题目描述 单源最短路径模板. 使用 SPFA 肯定是不行的啦,网格图hack. 所以我们使用 Dijkstra 算法. 这里有一篇写的很好的 blog,无必要赘述.最后贴上代码. #include&l ...
随机推荐
- 经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)
一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定 ...
- 【hash+二分】Antisymmetry
[题目链接] https://loj.ac/problem/2452 [参考博客] https://blog.csdn.net/xgc_woker/article/details/82904631 [ ...
- web框架链接
django系列教程(优):https://www.cnblogs.com/feixuelove1009/p/5823135.html
- Winform_chart控件_心得
效果图: 1.首先,在工具箱找到chart控件,拖到窗体中. 2.关于chart控件的细节设计: series集合设计: chartType可以选择折线图.柱状图.圆饼图等等. isValueShow ...
- [转载]深入理解maven构建生命周期和各种plugin插件
我就不复制博主文章了,到原文地址看吧.写这个只是为了自己搜索起来方便些: https://blog.csdn.net/zhaojianting/article/details/80321488 htt ...
- Linux--环境变量配置文件
Linux系统中环境变量配置文件分为两类: 全局环境变量配置文件 /etc/profile 用户环境变量配置文件 ~/.bash_profile . ~/.bash_login ~/.profile ...
- ubuntu - 14.04,安装docker(源代码管理工具)
一,安装docker: 1,安装curl:在shell中执行:sudo apt-get install curl 2,shell中执行:curl -sSL https://get.daocloud.i ...
- Java必考题目之JVM面试题目和答案
JVM内存模型 首先我们来了解一下JVM的内存模型的怎么样的: 1.堆:存放对象实例,几乎所有的对象实例都在这里分配内存 堆得内存由-Xms指定,默认是物理内存的1/64:最大的内存由-Xmx指定,默 ...
- 关于同一台服务器上两个PHP项目相互访问超时的问题
当一台服务器部署多个PHP项目,各自运行时并无干扰, 即使都使用 9000端口来跑php 但是有一种情况,当其中一个项目需要调用另一个php项目的接口时,便会超时,这是因为php是单线程的同步的 也许 ...
- java_day08_GUI
第八章:GUI组件 1.GUI概述-AWT和Swing 图形用户界面(Graphics User Interface, GUI) 是用户与程序交互的窗口,它比基于命令行的界面更直观并且更友好. GUI ...