#include <bits/stdc++.h>
#define fi first
#define se second
#define inf 0x3f3f3f3f
using namespace std;
using ll = long long;
const int nx=3e4+5;
const int sq=175;
int n, m, d[nx], b[nx], p[nx], ans=inf;
vector<int> city[nx];
bool vis[nx][sq];
struct dak
{
int i, w, p;
};
queue<dak> f;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>m;
for(int i = 0; i < m; i++)
{
cin>>b[i]>>p[i];
city[b[i]].emplace_back(i);
}
memset(d, -1, sizeof(d));
f.push({b[0], 0, 0});
while(f.size())
{
dak v=f.front();
f.pop();
int u=v.i, w=v.w, pw=v.p;
if(u<0 || u>=n)
continue;
if(abs(pw)<sq)
{
if(vis[u][abs(pw)])
continue;
vis[u][abs(pw)]=1;
}
if(d[u]==-1)
{
d[u]=w;
for(int i:city[u])
{
f.push({u-p[i], w+1, -p[i]});
f.push({u+p[i], w+1, p[i]});
}
}
f.push({u+pw, w+1, pw});
}
cout<<d[b[1]];
}
# | 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... |