#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
/**zagaro & lauren <3**/
#define mod 1000000007 //1e9 + 7
#define pi acos(-1)
#define wl while
#define str string
#define ENDL "\n"
#define sal ' '
#define tp_set ll
#define prc(n) cout.precision(n);cout<<fixed;
#define ord_set tree<tp_set, null_type, less<tp_set>, rb_tree_tag, tree_order_statistics_node_update>
typedef long long ll;
typedef bool bl;
typedef char car;
using namespace std;
using namespace __gnu_pbds;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
ll n, m, a, b, x, y, nod, val, pas;
cin>>n>>m;
vector<vector<ll> > vec(n+1);
vector<map<ll,ll> > dis(n+1);
cin>>a>>b;
vec[a].push_back(b);
cin>>b>>x;
for(int i=3;i<=m;i++){
cin>>x>>y;
vec[x].push_back(y);
}
if(a == b){
cout<<0<<ENDL;
return 0;
}
queue<tuple<ll,ll,ll> > pq;
for(int i=0;i<vec[a].size();i++){
dis[a][vec[a][i]] = 1;
pq.push({1, a-vec[a][i], -vec[a][i]});
pq.push({1, a+vec[a][i], vec[a][i]});
}
wl(!pq.empty() && dis[b].size() == 0){
tie(val, nod, pas) = pq.front();
pq.pop();
if(nod < 0 || nod >= n)continue;
if(dis[nod][abs(pas)] != 0)continue;
else {
dis[nod][abs(pas)] = val;
pq.push({val+1, nod+pas, pas});
for(int i=0;i<vec[nod].size();i++){
if(vec[nod][i] != abs(pas)){
dis[nod][vec[nod][i]] = val;
pq.push({val+1, nod-vec[nod][i], -vec[nod][i]});
pq.push({val+1, nod+vec[nod][i], vec[nod][i]});
}
}
}
}
if(dis[b].size() == 0)cout<<"-1\n";
else cout<<(*dis[b].begin()).second<<ENDL;
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... |