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 ...
随机推荐
- django初步了解
目录 学前了解 wsgiref模块( web服务网关接口) 根据不同的功能拆封成不同的py文件 动静态网页 HTTP协议 django初步了解1 1.小白必会三板斧 2.静态文件配置 3.reques ...
- WPF——Application
Application类处于WPF应用程序的最顶端,main函数就在这个类中. Application类的作用: 截图连接 https://docs.microsoft.com/zh-cn/dotne ...
- hdu 4632区间dp 回文字串计数问题
Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65535 K (Java/ ...
- C#文本转换为Json格式
private string ConvertJsonString(string str) { //格式化json字符串 JsonSeriali ...
- 异常-Throwable的几个常见方法
package cn.itcast_04; import java.text.ParseException; import java.text.SimpleDateFormat; import jav ...
- hadoop面试题(自己整理版)
1. hadoop 运行原理2. mapreduce 原理3. mapreduce 的优化4.举一个简单的例子说下 mapreduce 是怎么运行的5. hadoop 中 combiner 的作用6. ...
- Java高并发程序设计学习笔记(四):无锁
转自:https://blog.csdn.net/dataiyangu/article/details/86440836#1__3 1. 无锁类的原理详解简介:1.1. CAS1.2. CPU指令2. ...
- Google 开源的 Python 命令行库:初探 fire
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- Qt常用的登录界面设计
记录一下Qt常用的登录界面的设计 方便以后使用! 1.QpushButton改变一个按钮的颜色,当鼠标放上去和移开时显示不同的颜色.QPushButton { background-color: rg ...
- idea中无法自动提示相关jar包
遇到的问题:今天在pom.xml导入数据库坐标后,发现在在配置数据相关属性时,idea无法使用我引入的jar包,后面才发现是因为在下载包时,没网络了,jar包下载失败 解决办法:cmd进入自己的mav ...