This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vl ;
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define all(v) (v).begin(),(v).end()
const int MOD = 1000000007;
const int N = 1000005;
const double PI =4*atan(1);
const double eps = 1e-7;
ll n,m;
ll x,y;
vl tab[N];
ll p[N];
ll b[N];
bool vis[N];
unordered_map<ll ,ll> maa;
ll ans=-1;
void bfs(ll u){
queue<pair<ll,ll> > pq;
for(auto t:tab[u]){
pq.push(mp(0,u*50000 + p[t]));
}
vis[u]=1;
pair<ll,ll> ras;
while(!pq.empty()){
ras=pq.front();
pq.pop();
ll x=ras.s/50000;
ll y=ras.s%50000;
if(x==b[1]){
ans=max(ans,-ras.f);
continue;
}
ll z;
//cout << x << " " << y << endl;
if(vis[x]==0){
for(auto t: tab[x]){
z=maa[x*50000+p[t]];
if(x+p[t]<n){
if(maa[(x+p[t])*50000+p[t]]==0){
pq.push(mp(ras.f-1,(x+p[t])*50000+p[t] ));
maa[(x+p[t])*50000+p[t]]=1;
}
}
if(x-p[t]>=0){
if(maa[(x-p[t])*50000+p[t]]==0){
pq.push(mp(ras.f-1,(x-p[t])*50000+p[t] ));
maa[(x-p[t])*50000+p[t]]=1;
}
}
}
vis[x]=1;
}
z=maa[50000*(x+y)+y];
if(x+y <n && z==0){
maa[50000*(x+y)+y]=-ras.f+1;
if(x+y == b[1]){
ans=max(ans,-ras.f+1);
continue;
}
pq.push(mp(ras.f-1,50000*(x+y)+y));
}
z=maa[50000*(x-y)+y];
if(x-y >=0 && z==0){
maa[50000*(x-y)+y]=-ras.f+1;
if(x-y == b[1]){
ans=max(ans,-ras.f+1);
continue;
}
pq.push(mp(ras.f-1,50000*(x-y)+y));
}
//cout << x << endl;
}
}
int main(){
ios::sync_with_stdio(0);
//freopen("easy.txt","r",stdin);
cin >> n >>m ;
for(int i=0;i<m;i++){
cin >> x >> y;
p[i]=y;
b[i]=x;
tab[x].pb(i);
}
//cout << b[0]<< endl;
bfs(b[0]);
cout << ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |