#include<iostream> #include<cstring> #include<queue> #include<cstdio> using namespace std; #define INF 0x7FFFFFFF #define N 150000 #define M 2000000 typedef struct node { int u; int len; struct node *nex; }NODE; NODE edg[M],*head[N]; int hh[N],dis[N]; int cnt,n; void init() { int i; cnt=0; for(i=0;i<=n;i++) { head[i]=0; hh[i]=0; dis[i]=INF; } } void insert(int a,int b,int c) { edg[cnt].u=b; edg[cnt].len=c; edg[cnt].nex=head[a]; head[a]=&edg[cnt++]; } int SPFA() { int i,j; int t; queue<int>que; hh[1]=1; dis[1]=0; que.push(1); while(!que.empty()) { t=que.front(); que.pop(); hh[t]=0; for(NODE *p=head[t]; p ; p=p->nex) { if(dis[p->u]>dis[t]+p->len) { dis[p->u]=dis[t]+p->len; if(hh[p->u]==0) { que.push(p->u); hh[p->u]=1; } } } } return dis[n]; } int main() { int i,j; int a,b,c; int m; while(~scanf("%d%d",&n,&m)) { init(); while(m--) { scanf("%d%d%d",&a,&b,&c); insert(a,b,c); } printf("%d\n",SPFA()); } return 0; }