// // 兄弟のダイクストラ妻℃シャンた.cpp // アルゴリズム // // 2018年8月6日ON david.xuによって作成されます。 // 著作権2018銭漏れる?David.xu。すべての権利予約を。 // 入力するとき負チーム以上n回ループBFS // 速い:DFSポイント短絡がほとんどで2回出現 する#include <stdio.hに> する#include <cstdlib> 書式#include <CStringの> の#include <cmath> の#include <iostreamの> の#include <アルゴリズム> の#include <キュー> の#include <ベクトル> の#define MAXN 100010 使用して名前空間STD、INT N、M、S、[MAXN] DIS。 BOOL VIS [MAXN]。 構造体の縁{ int型のValへ; }。 ベクター <エッジ> E [MAXN]。 キュー < 整数 > Q; ボイドSPFA() { ため(int型 i = 1 ; iがn = <; iは++ ) DIS [I] = 十億一。 DIS [S] = 0 ; q.push(S); VIS [S] = 1 。 一方、(!q.empty()) { int型のx = q.front()。 q.pop()。 以下のために(int型 i = 0 ; iは、Eを<[X] .size(); iは++ ) { int型 = Y E [X] [I] .TO。 もし(DIS [X] + E [X] [I] .val < DIS [Y]) { DIS [Y] = DIS [X] + E [X] [I] .val。 もし(!VIS [Y]) { q.push(Y)。 VIS [Y] = 1 。 } } } VIS [X] = 0 。 } } int型)(主 { scanf関数(" %D%D%D "、&N、&M&S)。 以下のために(int型 I = 1 ; I <= M; iは++ ) { int型のX、Y、Z。 scanf関数(" %D%D%D "、およびX&Y、およびZ)。 エッジTMP。 tmp.to = Y。 tmp.val = Z。 E [X] .push_back(TMP)。 } SPFA()。 用(int型 i = 1 ; iが<= N iが++ ) のprintf(" %dの" 、DIS [I])。 リターン 0 ; }