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>
#define N 30050
#define f first
#define s second
using namespace std;
typedef pair<int, int> pii;
int n, m, casa[N], len[N], dist[N];
unordered_set<int> pos[N];
vector<pii> grafo[N];
priority_queue<pii, vector<pii>, greater<pii> > pq;
int main()
{
ios::sync_with_stdio(false); cin.tie(0);
cin>>m>>n;
for(int i = 1; i <= n; i++)
{
cin>>casa[i]>>len[i];
pos[ casa[i] ].insert( len[i] );
}
for(int i = 0; i < m; i++)
{
for(auto x: pos[i])
{
for(int j = i + x; j < m; j += x)
{
grafo[i].push_back({j, (j - i)/x});
if(pos[j].count(x)) break;
}
for(int j = i - x; j >= 0; j -= x)
{
grafo[i].push_back({j, (i - j)/x});
if(pos[j].count(x)) break;
}
}
}
for(int i = 0; i < m; i++) dist[i] = 2000000000;
dist[ casa[1] ] = 0;
pq.push({0, casa[1]});
while(!pq.empty())
{
int x = pq.top().s, d = pq.top().f;
pq.pop();
if(d > dist[x]) continue;
for(auto v: grafo[x])
{
if(dist[v.f] > dist[x] + v.s)
{
dist[v.f] = dist[x] + v.s;
pq.push({dist[v.f], v.f});
}
}
}
cout<<(dist[casa[2]] != 2000000000 ? dist[casa[2]] : -1)<<'\n';
}
# | 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... |