模板 單源最短路徑(弱化版)

2022-09-08 03:54:11 字數 1426 閱讀 4619

本題測試資料為隨機資料,在考試中可能會出現構造資料讓spfa不通過,如有需要請移步 p4779。

如題,給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。

第一行包含三個整數n、m、s,分別表示點的個數、有向邊的個數、出發點的編號。

接下來m行每行包含三個整數fi、gi、wi,分別表示第i條有向邊的出發點、目標點和長度。

一行,包含n個用空格分隔的整數,其中第i個整數表示從點s出發到點i的最短路徑長度(若s=i則最短路徑長度為0,若從點s無法到達點i,則最短路徑長度為2147483647)

輸入 #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
時空限制:1000ms,128m

資料規模:

對於20%的資料:n<=5,m<=15;

對於40%的資料:n<=100,m<=10000;

對於70%的資料:n<=1000,m<=100000;

對於100%的資料:n<=10000,m<=500000。保證資料隨機。

對於真正 100% 的資料,請移步 p4779。請注意,該題與本題資料範圍略有不同。

樣例說明:

1到3和1到4的文字位置調換

本題根據資料邊數m<=500000,鄰接矩陣存不下,只能使用靜態鄰接表儲存。

#include#include

using

namespace

std;

const

long

long inf=2147483647

;const

int maxn=10005

;const

int maxm=500005

;using

namespace

std;

int n,m,s,num_edge=0

;int

dis[maxn],vis[maxn],head[maxm];

struct

edgeedge[maxm];

void add(int

from,int to,int

dis)

void

spfa()

q.push(s); dis[s]=0; vis[s]=1;

while(!q.empty())}}

}}intmain()

spfa();

for(int i=1;i<=n;i++)

else

}return0;

}

單源最短路徑模板(弱化版)

題目描述 傳送門 題解思路 此題目如果直接套用單源最短路徑的模板並且不使用優化 即無最小堆或者優先佇列幫助實現 並以鄰接矩陣的方式儲存點和邊及權值,最多只能得到70分,測試點卡在mle上。在無優化的單源最短路徑模板上,倘若使用前向星的方法來實現邊和點的儲存 只換了儲存方式,其他的操作和思想沒變 便能...

P3371 模板 單源最短路徑(弱化版)

題目 p3371 模板 單源最短路徑 弱化版 本題測試資料為隨機資料,在考試中可能會出現構造資料讓spfa不通過,如有需要請移步 p4779。如題,給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。輸入格式 第一行包含三個整數n m s,分別表示點的個數 有向邊的個數 出發點的編號。接下來m...

P3371 模板 單源最短路徑(弱化版)

使用模版注意事項 注意頂點數maxn的值 注意極大資料inf的值 此題inf 2147483647 使用模版前言 注意頂點數maxn的值 注意極大資料inf的值 include include include include include include include define maxn 3...