Submission #482592

#TimeUsernameProblemLanguageResultExecution timeMemory
482592beaconmcJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
406 ms262148 KiB
#include <bits/stdc++.h>
 
typedef long long ll;
#define FOR(i, x, y) for(ll i=x; i<y; i++)
 
using namespace std;
 
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
  
#define ordered_set tree<ll, null_type,greater_equal<int>, rb_tree_tag,tree_order_statistics_node_update>
 
int n,m;
int a,b,baka,imposter,sus, countz,sussy;
 
vector<vector<int> > edges[30000];
set <int> stuff[30000];
 
int dists[30001];
 
int main(){
    FOR(i, 0, 30001){
        dists[i] = 2147483647;
    }
    cin >> n>>m;
    FOR(i, 0, m){
        cin >> a >> b;
        if(i==0) imposter = a;
        if (i==1) baka = a;
        stuff[a].insert(b);
    }
    FOR(k, 0, n){
        for(auto&i : stuff[k]){
            sus = k;
            sussy = i;
            countz = 0;
            while ((sus+sussy)<n){
                sus += sussy;
                countz++;
                edges[k].push_back({sus, countz});
                if (stuff[sus].find(i) != stuff[sus].end()) break;
            }
            sus = k;
            countz = 0;
            
            while ((sus-sussy)>=0){
                sus -= sussy;
                countz++;
                edges[k].push_back({sus, countz});
                if (stuff[sus].find(i) != stuff[sus].end()) break;
            }
        }
    }
    int src=imposter;
    
    priority_queue<vector<int>,vector<vector<int>>, greater<vector<int>>> pq;
    dists[src] = 0;
    pq.push({0, src});
 
	while (pq.size()) {
        vector<int> suz = pq.top();
        int cdist, node;
        pq.pop();
        cdist = suz[0];node=suz[1];
		if (cdist != dists[node]) continue;
 
		for (auto& i : edges[node]) {
			if (cdist+i[1] < dists[i[0]]) {
				pq.push({dists[i[0]] = cdist+i[1], i[0]});
			}
		}
	}
    if (dists[baka] != 2147483647){
        cout << dists[baka];
    }else{
        cout << -1;
    }
    
}
#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...