#include #include #include #include #include using namespace std; typedef long long ll; typedef pair P; class Edge { public: int to; ll cost; Edge(int t,ll c) { to=t; cost=c; } }; vector g[2000]; ll d[3][2000];//0...0から 1...pから 2...qから void dijk(int s,int n,int mode) { priority_queue,greater

> q; d[mode][s]=0; q.push(P(0,s)); while(!q.empty()) { P p=q.top();q.pop(); if(p.first>d[mode][p.second]) continue; for(int i=0;i>n>>m>>p>>q>>t; p--;q--; fill(d[0],d[3],1e15-1); for(int i=0;i>a>>b>>c; a--;b--; g[a].push_back(Edge(b,c)); g[b].push_back(Edge(a,c)); } dijk(0,n,0); dijk(p,n,1); dijk(q,n,2); //中間ノード2つの位置を全探索 for(int i=0;i