이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
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[30009];
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[n+1];
for(int i=0;i<=n;i++)dist[i]=1e9+3;
priority_queue<pair<int,int>> pq;
pq.push({0,b[0]});
dist[b[0]]=0;
int vis[n+1]={};
while(!pq.empty())
{
int u=pq.top().second;
int w=-pq.top().first;
pq.pop();
if(u==b[1])
{
cout<<w<<endl;
return 0;
}
if(vis[u])continue;
vis[u]=1;
for(int i=0;i<edg[u].size();i++)
{
if(dist[edg[u][i].first]>w+edg[u][i].second)
{
dist[edg[u][i].first]=w+edg[u][i].second;
pq.push({-dist[edg[u][i].first],edg[u][i].first});
}
}
}
cout<<-1<<endl;
}
컴파일 시 표준 에러 (stderr) 메시지
skyscraper.cpp: In function 'int main()':
skyscraper.cpp:75: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... |