#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef pair PII; typedef vector VI; typedef vector VVI; #define MP make_pair #define PB push_back #define inf 1000000007 #define rep(i,n) for(int i=0;i<(int)(n);++i) vector > > g; int main(){ int n,m; cin >> n >> m; g.resize(n); rep(i,m){ int a,b; ll c; cin >> a >> b >> c; a--;b--; g[a].PB(MP(b,c)); g[b].PB(MP(a,c)); } vector >dst(2,vector(n,1LL<<60)); priority_queue >,vector > > ,greater > > > pq; dst[0][0] = 0; dst[1][0] = 0; pq.push(MP(0,MP(0,0))); while(!pq.empty()){ auto x = pq.top(); pq.pop(); ll d = x.first; int now = x.second.first; int used = x.second.second; if(dst[used][now]!=d)continue; for(auto ed: g[now]){ int next = ed.first; ll p = ed.second; if(dst[used][next] > d+p){ dst[used][next] = d+p; pq.push(MP(d+p,MP(next,used))); } if(used==0){ if(dst[used+1][next] > d){ dst[used+1][next] = d; pq.push(MP(d,MP(next,used+1))); } } } } cout << 0 << endl; for(int i=1;i