#include #include #include using namespace std; #include #include #include template vectordijkstra(int s,const vector > >&G,T INF=numeric_limits::max()) { int n=G.size(); vectord(n,INF); vectorparent(n,-1); priority_queue,vector >,greater > >P; d[s]=0; P.push(make_pair(d[s],s)); while(!P.empty()) { pairp=P.top();P.pop(); int v=p.second; if(d[v]&e:G[v]) { int u=e.first; T cost=d[v]+e.second; if(d[u]>cost) { d[u]=cost; parent[u]=v; P.push(make_pair(d[u],u)); } } } return d; } int N,M,P,Q,T; main() { cin>>N>>M>>P>>Q>>T; vector > >G(N); for(int i=0;i>a>>b>>c; a--,b--; G[a].push_back(make_pair(b,c)); G[b].push_back(make_pair(a,c)); } P--,Q--; vectord1=dijkstra(0,G); vectordp=dijkstra(P,G); vectordq=dijkstra(Q,G); long ans=-1; if(d1[P]+dp[Q]+dq[0]<=T)ans=T; for(int i=0;i