#include #include #include #include #include #include #define LL __int64 using namespace std; const LL INF=(LL)0x3f3f3f3f*0x3f3f3f3f; const int N=100010; const int M=200020; struct TEdge{ int u,v,w; bool operator<(const TEdge& a)const { if(wpoint[N]; int n,m,k; void addedge(int u,int v,int w){ Cedge[tot].u=u; Cedge[tot].v=v; Cedge[tot].w=w; tot++; } void Push_into(int p,Point t){ point[p].push_back(t); } bool cmp(Point a,Point b){ if(a.lw==b.lw) return a.alw>b.alw; return a.lwCedge[i].w){ Push_into(v,Point(Cedge[i].w,Cedge[i].w)); } } continue; } if(point[u].empty()) continue; else { int p=upper_bound(point[u].begin(),point[u].end(),Point(Cedge[i].w-k,-INF),cmp)-point[u].begin(); if(p==0) continue; else if(p>0 && ppoint[u][p].alw+(LL)Cedge[i].w) Push_into(v,Point(Cedge[i].w,point[u][p].alw+(LL)Cedge[i].w)); } } if(point[n].empty()) printf("-1\n"); else printf("%I64d\n",point[n][point[n].size()-1].alw); } return 0; }