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 ...
随机推荐
- Linux目录结构解释
Linux的常用命令 cp: 用于文件复制的命令. cp file_1 file_2 copy_position -v: 复制的详细过程. -r: 复制目录. mv: 文件移动或文件重命名. mv f ...
- X86逆向15:OD脚本的编写技巧
本章节我们将学习OD脚本的使用与编写技巧,脚本有啥用呢?脚本的用处非常的大,比如我们要对按钮事件进行批量下断点,此时使用自动化脚本将大大减小我们的工作量,再比如有些比较简单的压缩壳需要脱壳,此时我们也 ...
- k8s之statefulSet-有状态应用副本集控制器
1.概述 无状态应用更关注群体,任何一个成员都可以被取代,有状态应用关注的是个体.用deployment控制器管理的nginx.myapp等都属于无状态应用,像mysql.redis.zookeepe ...
- 15-Perl 格式化输出
1.Perl 格式化输出Perl 是一个非常强大的文本数据处理语言.Perl 中可以使用 format 来定义一个模板,然后使用 write 按指定模板输出数据.Perl 格式化定义语法格式如下:fo ...
- C#Linq之求和,平均值,最大值,最小值
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 批量转换epub书籍为mobi电子书
kindlegen下载地址: http://kindlegen.s3.amazonaws.com/kindlegen_win32_v2_9.zip 原文: http://blog.sina.com.c ...
- 使用WSGI创建REST接口
问题 你想使用一个简单的REST接口通过网络远程控制或访问你的应用程序,但是你又不想自己去安装一个完整的web框架. 解决方案 构建一个REST风格的接口最简单的方法是创建一个基于WSGI标准(PEP ...
- zookeeper配置文件说明
zoo.cfg #zoo.cfg 的内容 # 心跳检查的时间 2秒 tickTime=2000 # 初始化时 连接到服务器端的间隔次数,总时间10*2=20秒 initLimit=10 # ZK Le ...
- python之字典一
字典的定义: 前面我们说过列表,它适合于将值组织到一个结构中并且通过编号对其进行引用.字典则是通过名字来引用值的数据结构,并且把这种数据结构称为映射,字典中的值没有特殊的顺序,都存储在一个特定的键(k ...
- vue中优化CheckBox初始状态被选中问题
<template> <div class="hello"> <h2>我是主界面</h2> <!-- <h2>我是 ...