#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; struct Way{ int to,cost; Way(){} Way(int _to,int _cost){ to=_to; cost=_cost; } }; struct Data{ int n,cost; Data(){} Data(int _n,int _cost){ n=_n; cost=_cost; } bool operator<(const Data &a)const{ return cost>a.cost; } }; int main(){ vector way[200]; int N,M,S,G,A,B,C; cin>>N>>M>>S>>G; for(int i=0;i>A>>B>>C; way[A].push_back(Way(B,C)); way[B].push_back(Way(A,C)); } priority_queue pq; pq.push(Data(S,0)); Data pq_c; int d[200]; fill_n((int*)d,200,INT_MAX); while(!pq.empty()){ pq_c = pq.top(); pq.pop(); if(d[pq_c.n]!=INT_MAX) continue; d[pq_c.n] = pq_c.cost; for(int i=0;i s; int n=G; s.push(n); while(n!=S){ int next=INT_MAX; for(int i=0;i