#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,prev; Data(){} Data(int _n,int _cost,int _prev){ n=_n; cost=_cost; prev=_prev; } bool operator<(const Data &a)const{ if(cost==a.cost) return prev>a.prev; 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,-1)); Data pq_c; bool used[200]={}; int prev[200]; while(!pq.empty()){ pq_c = pq.top(); pq.pop(); if(used[pq_c.n]==true) continue; used[pq_c.n] = true; prev[pq_c.n] = pq_c.prev; for(int i=0;i s; int n=G; s.push(n); while(n!=S){ n = prev[n]; s.push(n); } printf("%d",s.top()); s.pop(); while(!s.empty()){ printf(" %d",s.top()); s.pop(); }puts(""); return 0; }