# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
23564 | samir_droubi | Jakarta Skyscrapers (APIO15_skyscraper) | C++14 | 373 ms | 112020 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int n,m;
const int mxn=(1e5)+5;
vector<pair<int,int> >gr[mxn];
set<int>a[mxn];
set<pair<int,int> >s;
int st,en;
int dis[mxn];
set<pair<int,int> >::iterator it;
set<int>::iterator itt;
void dijk()
{
for(int i=0;i<mxn;++i)dis[i]=(1e9);
dis[st]=0;
s.insert({0,st});
while(!s.empty())
{
it=s.begin();
int v=it->second;
int d=it->first;
s.erase(it);
for(int i=0;i<gr[v].size();++i)
{
int u=gr[v][i].first;
int w=gr[v][i].second;
if(d+w<dis[u])
{
dis[u]=d+w;
s.insert({d+w,u});
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;++i)
{
int b,p;
scanf("%d%d",&b,&p);
a[b].insert(p);
if(i==0)st=b;
if(i==1)en=b;
}
for(int i=0;i<n;++i)
{
itt=a[i].begin();
for(itt;itt!=a[i].end();++itt)
{
int p=*itt;
for(int j=1;i+(j*p)<n;++j)
{
int cur=i+(j*p);
gr[i].push_back({cur,j});
if(a[cur].count(p))break;
}
}
}
for(int i=n-1;i>=0;--i)
{
itt=a[i].begin();
for(itt;itt!=a[i].end();++itt)
{
int p=*itt;
for(int j=1;i-(j*p)>=0;++j)
{
int cur=i-(j*p);
gr[i].push_back({cur,j});
if(a[cur].count(p))break;
}
}
}
dijk();
if(dis[en]==(1e9))dis[en]=-1;
printf("%d\n",dis[en]);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | 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... |