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 mx 30009
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int b[m+1],p[m+1];
int sp[n+1]={};
for(int i=0;i<m;i++)
{
cin>>b[i];
cin>>p[i];
sp[b[i]]=p[i];
}
vector<pair<int,int>> edg[mx];
queue<pair<int,int>> q;
q.push({b[0],sp[b[0]]});
int v1[n+1]={};
while(!q.empty())
{
int st=q.front().first;
int po=q.front().second;
q.pop();
if(v1[st])continue;
v1[st]=1;
int ind=0;
for(int i=st+po;i<n;i+=po)
{
ind++;
if(sp[i]!=0)
{
edg[st].push_back({i,ind});
q.push({i,sp[i]});
}
}
ind=0;
for(int i=st-po;i>=0;i-=po)
{
++ind;
if(sp[i]!=0)
{
edg[st].push_back({i,ind});
q.push({i,sp[i]});
}
}
}
int dist[mx+1];
for(int i=0;i<=mx;i++)dist[i]=(int)2e9;
priority_queue<pair<int,int>> pq;
pq.push({0,b[0]});
dist[b[0]]=0;
int vis[mx+1]={};
while(!pq.empty())
{
int u=pq.top().second;
pq.pop();
if(vis[u])continue;
vis[u]=1;
for(int i=0;i<edg[u].size();i++)
{
if(dist[edg[u][i].first]>dist[u]+edg[u][i].second)
{
dist[edg[u][i].first]=dist[u]+edg[u][i].second;
pq.push({-dist[edg[u][i].first],edg[u][i].first});
}
}
}
if(dist[b[1]]>=(int)2e9)
cout<<-1<<endl;
cout<<dist[b[1]]<<endl;
}
Compilation message (stderr)
skyscraper.cpp: In function 'int main()':
skyscraper.cpp:72:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<edg[u].size();i++)
~^~~~~~~~~~~~~~
# | 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... |