제출 #1283161

#제출 시각아이디문제언어결과실행 시간메모리
1283161zagaroJakarta Skyscrapers (APIO15_skyscraper)C++20
57 / 100
1100 ms124768 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<map<ll,ll> > dis(n+1);
    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]] = 1;
        pq.push({1, a-vec[a][i], -vec[a][i]});
        pq.push({1, a+vec[a][i], vec[a][i]});
    }
    wl(!pq.empty() && dis[b].size() == 0){
        tie(val, nod, pas) = pq.front();
        pq.pop();
        if(nod < 0 || nod >= n)continue;
        if(dis[nod][abs(pas)] != 0)continue;
        else {
            dis[nod][abs(pas)] = val;
            pq.push({val+1, nod+pas, pas});
            for(int i=0;i<vec[nod].size();i++){
                if(vec[nod][i] != abs(pas)){
                    dis[nod][vec[nod][i]] = val;
                    pq.push({val+1, nod-vec[nod][i], -vec[nod][i]});
                    pq.push({val+1, nod+vec[nod][i], vec[nod][i]});
                }
            }
        }
    }
    if(dis[b].size() == 0)cout<<"-1\n";
    else cout<<(*dis[b].begin()).second<<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...