#include using namespace std; typedef long long ll; typedef pair pll; typedef pair P; int main(){ const ll INF=1000000000; ll i,n,m,s,t; cin >> n >> m >> s >> t; s--,t--; vector p(n); for(i=0;i> p[i]; } vector > g(n); for(i=0;i> a >> b; a--,b--; g[a].push_back(b); g[b].push_back(a); } vector ds(n,-INF),ns(n,0); ds[s]=0,ns[s]=1; priority_queue

que; que.push(P(pll(p[s],0),s)); while(!que.empty()){ P p1=que.top(); que.pop(); ll u=p1.first.first,v=p1.first.second; ll r=p1.second; if(ds[r]!=v){ continue; } for(i=0;ip[us]){ if(ds[us]