#include using namespace std; struct Edge{ int to,cost; }; vector e[201010]; int d[201010]; int pre[201010]; int main(){ int n,m,s,g; cin>>n>>m>>s>>g; int u,v,c; for(int i=0;i>u>>v>>c; e[v].push_back(Edge{u,c}); e[u].push_back(Edge{v,c}); } fill_n(d, 201010, 1e9+1); priority_queue, greater> p_q; p_q.push(g); d[g] = 0; while(!p_q.empty()){ int fr=p_q.top();p_q.pop(); for(auto &&t: e[fr]){ if (d[t.to] > d[fr] + t.cost) { d[t.to] = d[fr] + t.cost; pre[t.to] = fr; p_q.push(t.to); } } } /* for (int i=0;i