Submission #161664

#TimeUsernameProblemLanguageResultExecution timeMemory
161664nvmdavaJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
951 ms3808 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ff first
#define ss second
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define N 30005
#define INF 0x3f3f3f3f3f3f3f3f
#define MOD 1000000007LL
 
priority_queue<pair<int, int> > pq;

vector<int> dog[N];
 
bool vis[N];
int dist[N];
int n;

void go(int v){
	vis[v] = 1;
	for(int& x : dog[v]){
		for(int i = v + x, a = 1; i < n; i += x, ++a){
			if(dist[i] > dist[v] + a){
				dist[i] = dist[v] + a;
				pq.push({-dist[i], i});
			}
		}
		for(int i = v - x, a = 1; i >= 0; i -= x, ++a){
			if(dist[i] > dist[v] + a){
				dist[i] = dist[v] + a;
				pq.push({-dist[i], i});
			}
		}
	}
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int m;
    cin>>n>>m;
    int b, p;
    int s, e;
    cin>>s>>p;
    dog[s].push_back(p);
    cin>>e>>p;
    dog[e].push_back(p);
    m -= 2;

    memset(dist, 0x3f, sizeof dist);

    while(m--){
    	cin>>b>>p;
    	dog[b].push_back(p);
    }

    pq.push({0, s});
    dist[s] = 0;

    while(!pq.empty()){
    	int a = pq.top().ss;
    	pq.pop();
    	if(a == e){
    		cout<<dist[e];
    		return 0;
    	}
    	if(!vis[a])
    		go(a);
    }

    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...