이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
//#define int long long
#define ii pair<int,int>
#define F first
#define S second
using namespace std;
const int N=3e4+100;
vector<int> vec[N];
unordered_map<int,int> vis[N];
int dis,st,n;
queue<ii> deq;
inline bool in(int x)
{
return 0<=x && x<n;
}
void fix(int v,int w)
{
if(in(v+w)&&(vis[v+w].count(w)==0||vis[v+w][w]>vis[v][w]+1)){
// cout<<5<<endl;
vis[v+w][w]=vis[v][w]+1;
deq.push({v+w,w});
}
if(in(v-w)&&(vis[v-w].count(w)==0||vis[v-w][w]>vis[v][w]+1)){
// cout<<5<<endl;
vis[v-w][w]=vis[v][w]+1;
deq.push({v-w,w});
}
}
int bfs()
{
deq.push({st,0});
while(deq.empty()==0){
int v=deq.front().F;
int w=deq.front().S;
deq.pop();
if(v==dis)return vis[v][w];
fix(v,w);
// cout<<v<<" "<<w<<endl;
for(auto x:vec[v]){
if(vis[v].count(x)==1){
continue;
}
vis[v][x]=vis[v][w];
fix(v,x);
// cout<<v<<" "<<x<<endl;
}
vec[v].clear();
}
return -1;
}
main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
/*
int ans=0;
int cnt=1;
for(int i=1;i<=3e4;i+=cnt){
cnt++;
ans+=3e4;
}
cout<<ans<<endl;
*/
int m;
cin>>n>>m;
int x,y;
cin>>x>>y;
vis[x][0]=0;
vec[x].push_back(y);
st=x;
cin>>x>>y;
vec[x].push_back(y);
dis=x;
m-=2;
while(m--){
cin>>x>>y;
vec[x].push_back(y);
}
cout<<bfs()<<endl;
}
/*
5 3
0 2
1 1
4 1
*/
컴파일 시 표준 에러 (stderr) 메시지
skyscraper.cpp:51:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
51 | main()
| ^~~~| # | 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... |