#include #include #include #include #include #include using namespace std; typedef long long LL; const LL inf=(1ll<<60); const int maxn=1e5+10; const int maxm=5e5+10; struct Edge { int v,w; Edge *nxt; }buf[maxm*2],*ECnt=buf,*G[maxn]; inline void AddEdge(int u,int v,int w) { ECnt->nxt=G[u]; ECnt->v=v; ECnt->w=w; G[u]=ECnt++; } int n,m,s,t,g,q,h[maxn],l[maxn],TMax[maxn]; LL dist[maxn]; bool vis[maxn]; struct QData { int u; LL UDist; }; inline bool operator<(const QData &A,const QData &B) { return B.UDist Q; Q.push((QData){s,0}); while(Q.size()) { int u=Q.top().u; Q.pop(); if(vis[u]) continue; vis[u]=true; if(dist[u]>TMax[u]) continue; for(Edge *it=G[u];it;it=it->nxt) if(dist[u]+it->wv]) { dist[it->v]=dist[u]+it->w; Q.push((QData){it->v,dist[it->v]}); } } if(dist[t]<=g) printf("%lld\n",dist[t]); else printf("sad\n"); return 0; }