只能A样例
#include<bits/stdc++.h>
//#define itn int
const int maxm=2e5+10;
using namespace std;
struct node{
int pos,dis;
friend bool operator <(node a,node b){
return a.dis<b.dis;
}
};
int n,m,a,b,ddis[maxm];
int cnt,dis[maxm],h[maxm];
bool vis[maxm];
struct edge{
int to,next,val;
}way[maxm];
priority_queue<node> q;
void add(int from,int to){
way[++cnt].to=to;
way[cnt].val=1;
way[cnt].next=h[from];
h[from]=cnt;
}
void dij(){
for(int i=0;i<n;i++) dis[i]=INT_MAX;
dis[a]=0;
q.push((node){a,0});
while(!q.empty()){
node tmp=q.top();
q.pop();
int x=tmp.pos,y=tmp.dis;
if(vis[x]) continue;
vis[x]=1;
for(int i=h[x];i;i=way[i].next){
if(dis[way[i].to]>dis[x]+way[i].val){
dis[way[i].to]=dis[x]+way[i].val;
q.push((node){way[i].to,dis[way[i].to]});
}
}
}
}
int main()
{
cin>>n>>m>>a>>b;
for(int i=0;i<n;i++) cin>>ddis[i];
for(int i=1;i<=m;i++){
int c,d; cin>>c>>d;
add(c,d);
//add(d,c,ddis[d]-ddis[c]-1);
}
dij();
if(dis[b]==INT_MAX) cout<<"No solution";
else cout<<ddis[b]-ddis[a]+dis[b];
return 0;
}