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

2021-09-12 18:39:27 字數 1443 閱讀 4956

題目:p3371 【模板】單源最短路徑(弱化版)

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

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

輸入格式:

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

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

輸出格式:

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

輸入樣例#1:輸出樣例#1:

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

**:

#includeusing namespace std;

#define maxn 10010

#define maxm 500010

#define inf 2147483647

int n,m,s;

struct node

;vectorg[maxn];

int d[maxn];

int vis[maxn]=;

void dijkstra(int s)

vis[p]=1;//標記

for(int j=0;ji之間的最短距離 d[i]=min(d[p]+p->i,d[i])

if(d[p]+g[p][j].w>n>>m>>s;

int a;

node e;

for(int i=0;i>a>>e.ed>>e.w;

g[a].push_back(e);

} dijkstra(s);

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

};vectoredge;

vectorg[maxn];//g[i]儲存的是點i相連的邊在edge中的位置

int d[maxn];//d[i] s->i的距離

int vis[maxn]=;//標記

struct node

);//進佇列終點s 路徑長為0

while( !q.empty() )

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

cout<}*/

dijkstra();

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

cout

}

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

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

P3371 模板 單源最短路徑

題目描述 如題,給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。輸入輸出格式 輸入格式 第一行包含三個整數n m s,分別表示點的個數 有向邊的個數 出發點的編號。接下來m行每行包含三個整數fi gi wi,分別表示第i條有向邊的出發點 目標點和長度。輸出格式 一行,包含n個用空格分隔的整...

P3371 模板 單源最短路徑

題目描述 如題,給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。輸入輸出格式 輸入格式 第一行包含三個整數n m s,分別表示點的個數 有向邊的個數 出發點的編號。接下來m行每行包含三個整數fi gi wi,分別表示第i條有向邊的出發點 目標點和長度。輸出格式 一行,包含n個用空格分隔的整...