#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; int n, m; vector

g[100001]; const ll INF=1e16; int main() { cin>>n>>m; for(int i=0; i>a>>b>>c; a--; b--; g[a].push_back(P(c, b)); g[b].push_back(P(c, a)); } ll d[2][100001]; fill(d[0], d[0]+n, INF); fill(d[1], d[1]+n, INF); d[0][0]=0, d[1][0]=0; priority_queue, greater

> que; que.push(P(0, 0)); que.push(P(0, n)); while(!que.empty()){ P p=que.top(); que.pop(); int x=p.second; if(x>=n){ if(p.first>d[1][x-n]) continue; }else{ if(p.first>d[0][x]) continue; } if(x>=n){ for(auto q:g[x-n]){ int y=q.second; if(d[1][y]>d[1][x-n]+q.first){ d[1][y]=d[1][x-n]+q.first; que.push(P(d[1][y], y+n)); } } }else{ for(auto q:g[x]){ int y=q.second; if(d[0][y]>d[0][x]+q.first){ d[0][y]=d[0][x]+q.first; que.push(P(d[0][y], y)); } if(d[1][y]>d[0][x]){ d[1][y]=d[0][x]; que.push(P(d[1][y], y+n)); } } } } for(int i=0; i