#include #include #include #include #include #include #include #include #include #include #include #include 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 P;//最短距離、頂点番号 int V; vector G[MAX_V]; ll d[MAX_V]; void dijkstra(int s){ priority_queue, greater

> 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<