洛谷 P4779【模板】单源最短路径(标准版)

题目背景

2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路。

然后呢?

100→60 ;

Ag→Cu ;

最终,他因此没能与理想的大学达成契约。

小 F 衷心祝愿大家不再重蹈覆辙。

题目描述

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

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

输入输出格式

输入格式:

第一行为三个正整数 N, M, S。 第二行起 M 行,每行三个非负整数 ui​,vi​,wi​ ,表示从 ui​ 到 vi​ 有一条权值为 wi​ 的边。

输出格式:

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

输入输出样例

输入样例#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 ≤ N ≤ 100000 ;

1 ≤ M ≤ 200000 ;

S = 1 ;

1 ≤ ui​,vi ​≤ N ;

0 ≤ wi​ ≤ 109,

0 ≤ ∑wi ​≤ 109 。

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

思路:spfa+优先队列优化  or  dijkstra+堆优化

 用P3371中的代码(再开上long long),可以过掉后两个点,但前几个点都会TLE

#include<iostream>
#include<cstring>
#include<cctype>
#include<cstdio>
#include<vector>
#include<queue>
#define M 100005
using namespace std;
int n, m, s, a, b, c;
struct Edge {
int to, dis;
};
vector<Edge> G[M];
inline int read() {
int X = , z = ; char ch = ;
while(!isdigit(ch)) z = ch == '-' ? : , ch = getchar();
while(isdigit(ch)) X = (X<<) + (X<<) + (ch^), ch = getchar();
return z ? -X : X;
}
long long dis[M];
bool inqueue[M];
struct Node {
int x;
};
bool operator < (const Node &x, const Node &y) {
return dis[x.x] > dis[y.x];
}
priority_queue<Node> Q;
int cnt;
bool hasout[M];
inline bool SPFA(int S) {
memset(dis, 0x3f, sizeof dis);
memset(inqueue, , sizeof inqueue);
Q.push((Node) {
S
});
inqueue[S] = ; dis[S] = ;
int u, v, cost;
while(!Q.empty()) {
u = Q.top().x; Q.pop();
if(!hasout[u]) cnt++;
if(cnt == n) return ;
hasout[u] = ;
inqueue[u] = false;
for(int i = ; i < G[u].size(); ++i) {
v = G[u][i].to;
cost = G[u][i].dis;
if(dis[v] > dis[u] + cost) {
dis[v] = dis[u] + cost;
if(!inqueue[v]) {
inqueue[v] = true;
Q.push((Node) {
v
});
}
}
}
}
return ;
}
int main() {
n = read(); m = read(); s = read();
for(register int i = ; i <= m; ++i) {
a = read(), b = read(), c = read();
G[a].push_back((Edge) {
b, c
});
}
SPFA(s);
for(register int i = ; i <= n; ++i)
printf("%d ", dis[i]);
return ;
}

spfa+优先队列

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

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

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

  2. 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)

    首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...

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

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

  4. 洛谷 P4779 【模板】单源最短路径(标准版) 题解

    P4779 [模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100 ...

  5. 洛谷P4779 【模板】单源最短路径

    P4779 [模板]单源最短路径(标准版) 题目链接 https://www.luogu.org/problemnew/show/P4779 题目描述 给定一个 N个点,M条有向边的带非负权图,请你计 ...

  6. P4779 【模板】单源最短路径(标准版)

    P4779 [模板]单源最短路径(标准版) 求单源最短路, 输出距离 Solution \(nlogn\) 堆优化 \(Djs\) Code #include<iostream> #inc ...

  7. 洛谷 P3371 【模板】单源最短路径(弱化版) 题解

    P3371 [模板]单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出 ...

  8. 洛谷P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交  讨论  题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...

  9. 洛谷 P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出 ...

随机推荐

  1. 微软CEO纳德拉拥抱Linux意欲何为?

    "我不喜欢打一场过时的战争."微软 CEO 萨蒂亚·纳德拉说道,"我想要打一场全新的战役." 上周日晚上.萨蒂亚·纳德拉来到旧金山 North Beach 区的 ...

  2. 怎样给UINavigationBar加入button?

    Mads Mobæk:给UINavigationBar加入button的演示样例代码 1 2 3 4 5 6 7 8 UIBarButtonItem *rightButton = [[UIBarBut ...

  3. MKVToolNix v8.2

    32位版:http://pan.baidu.com/s/1i3s4gGd 64位版: http://pan.baidu.com/s/1gdvqbpp

  4. LINQ查询基础

    一.什么是LINQ LINQ是Language Integrate Query的缩写,意为语言集成查询,是微软在.Net Framework 4.5版中推出的主要特性之一. 它为开发人员提供了统一的数 ...

  5. 【转】Android应用底部导航栏(选项卡)实例

    现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...

  6. tomcat7 bootstrap

    tomcat7 bootstrap http://t5crambing.iteye.com/blog/1923636

  7. ps切图时常用的操作与快捷键

    一:两种切片方法 第一种: 1.使用切片工具划分好你要切的模块 2.点击'存储为web所有格式',在存储之前可以修改图片的品质来改变文件的大小. 3.在存储时切片有三种选择方式,按照自己的需要选择. ...

  8. java web应用调用python深度学习训练的模型

    之前参见了中国软件杯大赛,在大赛中用到了深度学习的相关算法,也训练了一些简单的模型.项目线上平台是用java编写的web应用程序,而深度学习使用的是python语言,这就涉及到了在java代码中调用p ...

  9. FZU 1096 QS Network

    QS Network Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original ID: ...

  10. [Python] Python list slice syntax fun

    # Python's list slice syntax can be used without indices # for a few fun and useful things: # You ca ...