Submission #1283168

#TimeUsernameProblemLanguageResultExecution timeMemory
1283168zagaroJakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
175 ms114512 KiB
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
/**zagaro & lauren <3**/
#define mod 1000000007 //1e9 + 7
#define pi acos(-1)
#define wl while
#define str string
#define ENDL "\n"
#define sal ' '
#define tp_set ll
#define prc(n) cout.precision(n);cout<<fixed;
#define ord_set tree<tp_set, null_type, less<tp_set>, rb_tree_tag, tree_order_statistics_node_update>
typedef long long ll;
typedef bool bl;
typedef char car;
using namespace std;
using namespace __gnu_pbds;
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    ll n, m, a, b, x, y, nod, val, pas;
    cin>>n>>m;
    vector<vector<ll> > vec(n+1);
    vector<vector<bl> > dis(n+1, vector<bl> (30010, false));
    vector<bl> vis(n+1, false);
    cin>>a>>b;
    vec[a].push_back(b);
    cin>>b>>x;
    for(int i=3;i<=m;i++){
        cin>>x>>y;
        vec[x].push_back(y);
    }
    if(a == b){
        cout<<0<<ENDL;
        return 0;
    }
    queue<tuple<ll,ll,ll> > pq;
    for(int i=0;i<vec[a].size();i++){
        dis[a][vec[a][i]] = true;
        vis[a]=true;
        pq.push({1, a-vec[a][i], -vec[a][i]});
        pq.push({1, a+vec[a][i], vec[a][i]});
    }
    wl(!pq.empty() && !vis[b]){
        tie(val, nod, pas) = pq.front();
        pq.pop();
        if(nod < 0 || nod >= n)continue;
        if(dis[nod][abs(pas)])continue;
        else {
            dis[nod][abs(pas)] = true;
            pq.push({val+1, nod+pas, pas});
            if(!vis[nod]){
                vis[nod] = true;
                for(int i=0;i<vec[nod].size();i++){
                    if(vec[nod][i] != abs(pas)){
                        dis[nod][vec[nod][i]] = true;
                        pq.push({val+1, nod-vec[nod][i], -vec[nod][i]});
                        pq.push({val+1, nod+vec[nod][i], vec[nod][i]});
                    }
                }
            }
        }
    }
    if(!vis[b])cout<<"-1\n";
    else cout<<val<<ENDL;
    return 0;
}
#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...