結果
問題 | No.807 umg tours |
ユーザー |
![]() |
提出日時 | 2019-03-22 23:27:49 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 605 ms / 4,000 ms |
コード長 | 1,509 bytes |
コンパイル時間 | 1,054 ms |
コンパイル使用メモリ | 93,644 KB |
実行使用メモリ | 42,156 KB |
最終ジャッジ日時 | 2024-11-23 19:10:26 |
合計ジャッジ時間 | 8,316 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 26 |
ソースコード
#include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <string> #include <math.h> #include <iomanip> #include <limits> #include <list> #include <queue> #include <tuple> #include <map> using namespace std; #define MOD (long long int)(1e9+7) #define ll long long int #define rep(i,n) for(int i=0; i<(int)(n); i++) #define reps(i,n) for(int i=1; i<=(int)(n); i++) #define REP(i,n) for(int i=n-1; i>=0; i--) #define REPS(i,n) for(int i=n; i>0; i--) #define INF (int)(1123456789) #define LINF (long long int)(112345678901234567) #define MAX_V 200005 //lower_bound使え struct edge{int to; ll cost;}; typedef pair<ll, int> P;//最短距離、頂点番号 int V; vector<edge> G[MAX_V]; ll d[MAX_V]; void dijkstra(int s){ priority_queue<P, vector<P>, greater<P> > que; fill(d,d+V,LINF); d[s] = 0; que.push(P(0,s)); while(!que.empty()){ P p = que.top(); que.pop(); int v = p.second; if(d[v] < p.first) continue; rep(i, G[v].size()){ edge e = G[v][i]; if(d[e.to] > d[v] + e.cost){ d[e.to] = d[v] + e.cost; que.push(P(d[e.to], e.to)); } } } } int main(void){ int n,m,a,b; ll c; cin>>n>>m; V = 2*n+1; rep(i,m){ cin>>a>>b>>c; G[a].push_back((edge){b,c}); G[b].push_back((edge){a,c}); G[a].push_back((edge){b+n,0}); G[b].push_back((edge){a+n,0}); G[a+n].push_back((edge){b+n,c}); G[b+n].push_back((edge){a+n,c}); } dijkstra(1); reps(i,n){ if(i==1){ cout<<0<<endl; continue; } cout<<d[i]+d[i+n]<<endl; } return 0; }