#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair P; const ll INF=1e16; int n, m, p, q; vector

g[2001]; void dijkstra(int s, ll d[2001]){ fill(d, d+n, INF); d[s]=0; priority_queue, greater

> que; que.push(P(0, s)); while(!que.empty()){ P p1=que.top(); que.pop(); int x=p1.second; //if(p1.first>d[x]) continue; for(int j=0; jd[x]+q1.first){ d[y]=d[x]+q1.first; que.push(P(d[y], y)); } } } } int main() { ll t; cin>>n>>m>>p>>q>>t; p--; q--; 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 d1[2001], dp[2001], dq[2001]; dijkstra(0, d1); dijkstra(p, dp); dijkstra(q, dq); if(t=d1[p]+dp[q]+d1[q]){ cout<t) continue; ans=max(ans, t-dm); } } cout<