Submission #1275728

#TimeUsernameProblemLanguageResultExecution timeMemory
1275728mhn_neekJakarta Skyscrapers (APIO15_skyscraper)C++20
36 / 100
1099 ms129784 KiB
// IN THE NAME OF GOD
#include<bits/stdc++.h>
using namespace std;
typedef long long int lli;
typedef pair<lli,lli> pii;
typedef vector<lli> ve;
typedef vector<pii> vp;
const lli N = 5e5 + 100;
const lli INF = 1e18;
const lli mod = 1e9 + 7;
#define PB push_back
#define MP make_pair
#define fi first
#define se second
#define FOR(x,y) for(lli x = 0; x < y; x ++)
#define FORS(x,y) for(lli x = 1; x <= y; x ++)
#define all(x) x.begin(),x.end()
#define lb lower_bound
#define ub upper_bound
#define debug(x) cerr<<(#x)<<" "<<x<<endl
lli n,m;
lli B[N],P[N];
vp adj[N];
lli dis[N];
int main(){
	ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	FOR(i,m){
		cin>>B[i]>>P[i];
	}
	FOR(a,m){
		FOR(b,m){
			lli fa = abs(B[b]-B[a]);
			if(a != b && fa%P[a] == 0){
				adj[a].PB(MP(b,fa/P[a]));
				adj[b].PB(MP(b,2*(fa/P[a]) ));
			}
		}
	}
	FOR(i,m)
		dis[i] = INF;
	priority_queue<pii,vp,greater<pii>> pq;
	pq.push(MP(0,0));
	dis[0] = 0;
	while(pq.size()){
		lli v = pq.top().se;
		lli D = pq.top().fi;
		pq.pop();
		if(D != dis[v])continue;
		for(auto [u,w] : adj[v]){
			if(dis[u] > dis[v] + w){
				dis[u] = dis[v] + w;
				pq.push(MP(dis[u],u));
			}
		}
	}
	if(dis[1] == INF)dis[1] = -1;
	cout<<dis[1]<<endl;
}
#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...