题目描述

给定一个 NN 个点,MM 条有向边的带非负权图,请你计算从 SS 出发,到每个点的距离。

数据保证你能从 SS 出发到任意点。

输入格式

第一行为三个正整数 N, M, SN,M,S。 第二行起 MM 行,每行三个非负整数 u_i, v_i, w_iu

i

​ ,v

i

​ ,w

i

​ ,表示从 u_iu

i

​ 到 v_iv

i

​ 有一条权值为 w_iw

i

​ 的边。

输出格式

输出一行 NN 个空格分隔的非负整数,表示 SS 到每个点的距离。

输入输出样例

输入 #1 复制

4 6 1

1 2 2

2 3 2

2 4 1

1 3 5

3 4 3

1 4 4

输出 #1 复制

0 2 4 3

说明/提示

样例解释请参考 数据随机的模板题。

1 \leq N \leq 1000001≤N≤100000;

1 \leq M \leq 2000001≤M≤200000;

S = 1S=1;

1 \leq u_i, v_i\leq N1≤u

i

​ ,v

i

​ ≤N;

0 \leq w_i \leq 10 ^ 90≤w

i

​ ≤10

9

,

0 \leq \sum w_i \leq 10 ^ 90≤∑w

i

​ ≤10

9

本题数据可能会持续更新,但不会重测,望周知。

2018.09.04 数据更新 from @zzq

链式前向星的模板,可以过本题。第二个代码是vector建图的模板,不卡常的情况下很好使。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#include <vector>
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb std::ios::sync_with_stdio(false)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define gg(x) getInt(&x)
using namespace std;
typedef long long ll;
inline void getInt(int* p);
/*** TEMPLATE CODE STARTS HERE ***/
const int maxn=100010;
const int MAXM=200000;
// const int INF= 0x3f3f3f3f; struct Edge
{
int to,next;
ll dist;
Edge(){}
Edge(int tt,ll dd)
{
to=tt;
dist=dd;
}
bool operator < (const Edge x ) const
{
return dist > x.dist;
}
}edge[MAXM];
int head[maxn],tot;
void addedge(int u,int v,ll c)
{
edge[tot].to = v;
edge[tot].next = head[u];
edge[tot].dist=c;
head[u] = tot++;
}
priority_queue<Edge> heap;
ll dis[maxn];
int t,n,star;
bool vis[maxn];
void dijkstra (int strat)
{
// memset(dis,INF,sizeof(dis));
repd(i,1,n)
{
dis[i]=1e18;
vis[i]=0;
}
dis[strat]=0;
heap.push(Edge(strat,dis[strat]));
while(!heap.empty())
{
Edge x= heap.top();
heap.pop();
int u=x.to;
if(vis[u])
{
continue;
}
vis[u]=1;
for(int i = head[u];i != -1;i = edge[i].next)
{
Edge now = edge[i];
if(dis[now.to]>x.dist+now.dist)
{
dis[now.to]=x.dist+now.dist;
heap.push(Edge(now.to,dis[now.to]));
}
}
} }
int main()
{
scanf("%d %d %d",&n,&t,&star);
int a,b,d;
memset(head,-1,sizeof(head));
repd(i,1,t)
{
scanf("%d %d %d",&a,&b,&d);
addedge(a,b,d);
}
dijkstra(star);
repd(i,1,n)
{
printf("%lld ",dis[i]);
} return 0;
} inline void getInt(int* p) {
char ch;
do {
ch = getchar();
} while (ch == ' ' || ch == '\n');
if (ch == '-') {
*p = -(getchar() - '0');
while ((ch = getchar()) >= '0' && ch <= '9') {
*p = *p * 10 - ch + '0';
}
}
else {
*p = ch - '0';
while ((ch = getchar()) >= '0' && ch <= '9') {
*p = *p * 10 + ch - '0';
}
}
}

l洛谷P4779 【模板】单源最短路径(标准版)(dijkstra)的更多相关文章

  1. 单源最短路径问题2 (Dijkstra算法)

    用邻接矩阵 /* 单源最短路径问题2 (Dijkstra算法) 样例: 5 7 0 1 3 0 3 7 1 2 4 1 3 2 2 3 5 2 4 6 3 4 4 输出: [0, 3, 7, 5, 9 ...

  2. 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法

    Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负. Dijkstra算法是贪婪算法的一个很好的例子.设置一顶点集合S,从源点s到集合中的顶点的最终最短路径 ...

  3. 单源最短路径问题之dijkstra算法

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 算法的原理 以源点开始,以源点相连的顶点作为向外延伸的顶点,在所有这些向外延伸的顶 ...

  4. 单源最短路径 Bellman_ford 和 dijkstra

    首先两个算法都是常用于 求单源最短路径 关键部分就在于松弛操作 实际上就是dp的感觉 if (dist[e.to] > dist[v] + e.cost) { dist[e.to] = dist ...

  5. 非负权值有向图上的单源最短路径算法之Dijkstra算法

    问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...

  6. 洛谷 P3371 【模板】单源最短路径(堆优化dijkstra)

    题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出发点的编号. 接下来M行每行包含三 ...

  7. 【洛谷 p3371】模板-单源最短路径(图论)

    题目:给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 解法:spfa算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #in ...

  8. [模板]单源最短路径(Dijkstra)

    如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 主要还是再打一遍最短路,这种算法我用的不多... #include<bits/stdc++.h> using namesp ...

  9. 单源最短路径—Bellman-Ford和Dijkstra算法

    Bellman-Ford算法:通过对边进行松弛操作来渐近地降低从源结点s到每个结点v的最短路径的估计值v.d,直到该估计值与实际的最短路径权重相同时为止.该算法主要是基于下面的定理: 设G=(V,E) ...

随机推荐

  1. 使用gimp画线、矩形、圆等

    使用gimp画线.矩形.圆等 https://blog.csdn.net/tody_guo/article/details/7628508 2012年06月03日 19:08:47 Tody Guo  ...

  2. ios8唤不起APP的问题

    https://stackoverflow.com/questions/27526966/ios-8-window-location-href-doesnt-work-with-url-scheme ...

  3. 【转】hbase meta表修复

    [From]https://www.iteye.com/blog/blackproof-2052898 meta表修复一 查看hbasemeta情况 hbase hbck .重新修复hbase met ...

  4. extentreports 测试报告引用extend.js/css失败

    测试工程引用extentreports 生成的测试报告,因为报告中的js和css网络不通,所以页面乱码 解决思路: 下载需要的js.css放到测试工程的static目录下 下载extentreport ...

  5. 将json文件转化为可视化

    利用python转化为可视化: python -mjson.tool

  6. Golang 单例模式 singleton pattern

    在Java中,单例模式的实现主要依靠类中的静态字段.在Go语言中,没有静态类成员,所以我们使用的包访问机制和函数来提供类似的功能.来看下下面的例子: package singleton         ...

  7. word2010 标题自动编号设置

    今天打算写篇文档,发现生成标题时无法自动生成编号,上网查了一下,现在把解决办法跟附图一块儿奉上. 新建word文档: 默认版式: 设置自动编号所在工具栏位置: 设置选择: 最终结果:

  8. 非常好的一个JS代码(CJL.0.1.js)

    /*! * Cloudgamer JavaScript Library v0.1 * Copyright (c) 2009 cloudgamer * Blog: http://cloudgamer.c ...

  9. 网站性能优化(website performance optimization)2

    我们先研究下构建渲染树前的几个步骤:也就是DOM和CSSOM,通常这些步骤的效果最差使你的网页呈现速度非常慢,我们是讨论尽可能快的将HTML流式传输给客户端,使浏览器能够开始构建DOM,还有其他注意事 ...

  10. HP UNIX弱口令

    这种弱口令直接丢进kali linu里用john --wordlist=zd.txt 加上文件