Submission #405861

#TimeUsernameProblemLanguageResultExecution timeMemory
405861A_DJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
523 ms30952 KiB
#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=2e3+100;
vector<int> vec[N];
map<int,int> vis[N];
int dis,st,n;
set<int> stt;
deque<ii> deq;
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_back({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_back({v-w,w});
    }
}
int bfs()
{
    deq.push_back({st,0});
    while(deq.empty()==0){
        int v=deq[0].F;
        int w=deq[0].S;
        deq.pop_front();
        stt.insert(v);
        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()
{
    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;
//    for(auto x:stt)cout<<x<<" ";cout<<endl;
}
/*
5 3
0 2
1 1
4 1
*/

Compilation message (stderr)

skyscraper.cpp:53:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   53 | main()
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...