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 ...
随机推荐
- Python特色数据类型--元组
元组是不可改变的,创建后就不能做任何修改操作了 1.元组用()表示
- 查询集 QuerySet
1 概念 Django的ORM中存在查询集的概念. 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合. 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): a ...
- 安装calico
安装docker:https://www.cnblogs.com/cjsblogs/p/8717304.html 安装etcd集群:https://www.cnblogs.com/cjsblogs/p ...
- -bash: fork: retry: 没有子进程
今天遇到一个问题 -bash: fork: retry: 没有子进程 解决方法 设置各linux 用户的最大进程数,下面我把某linux用户的最大进程数设为10000个: ulimit -u 10 ...
- nofollow标签浪费了多少站长做外链的时间
对于rel=“external nofollow”和rel=“nofollow”,这两句代码,使用起来效果基本是一致的,只是前者较后者更为规范一点,两者翻译过来的意思就是:rel=“external ...
- EasyUI_DataGrid数据操作
1.html: <div style="width: 1100px;height: 350px ;overflow: scroll"> <table id=&qu ...
- 开发工具idea
https://blog.csdn.net/mashuai720/article/details/79389314
- The method getContextPath() from the type HttpServletRequest
在做java项目开发的时候,jsp页面很容易报出这个错误. 错误的原因很多,但是都和JRE有关. 一般在导入项目的时候容易报出这个错误,主要因为JRE(jdk版本不一致). 解决方法:就是重新配置路径 ...
- vue-过滤器-时间戳转换
main.js // 将时间戳转日期格式的过滤器 Vue.filter('dateFormat', (dataStr) => { var time = new Date(dataStr); fu ...
- 这不是javascript:什么?
javascript协议.<a href=“javascript:void(0):”>xxx</a>基于事件的事件,例如:<input onblur=“check():” ...