开 O2 后第一个测试点 MLE,不知道什么原因
#include<bits/stdc++.h>
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
#define ll long long
#define F(i,a,b) for (int i=a;i<=b;i++)
using namespace std;
const int N=1e3+10,NN=1e4+10;
ll n,m,k,x,y,u,v,w,cnt=0,t=0,l,r,len,T;
ll mini=INT_MAX,maxi=0,Mod;
string s1,s2;
int a[N],ans[N];
bool b[N];
struct Node{
int id,step;
};
queue<Node> q;
int main(){
cin>>n>>u>>v;
F(i,1,n) cin>>a[i];
F(i,1,n) ans[i]=150;
q.push({u,0});
while(!q.empty()){
Node num=q.front();
q.pop();
if(num.id<1||num.id>n) continue;
if(num.step>ans[num.id]) continue;
if(num.id==v){
cout<<num.step;
return 0;
}
ans[num.id]=num.step;
q.push({num.id+a[num.id],num.step+1});
q.push({num.id-a[num.id],num.step+1});
}
cout<<-1;
return 0;
}