Submission #1288107

#TimeUsernameProblemLanguageResultExecution timeMemory
1288107lambd47Jakarta Skyscrapers (APIO15_skyscraper)C++20
36 / 100
1097 ms32632 KiB
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>

using namespace std;

#define L(i,j,k) for(int i=(j);i<=(k);i++)
#define R(i,j,k) for(int i=(j);i>=(k);i--)
#define all(v) (v).begin(),(v).end()
#define sz(v) ((int)(v).size())





void solve(){
	int n,m;
	cin>>n>>m;
	vector<vector<pair<int,int>>> adj(m);
	vector<int> pos(m);
	vector<int> pulo(m);
	L(i,0,m-1)cin>>pos[i]>>pulo[i];
	
	
	auto dist=[&](int i, int j)->int{
		if(abs(pos[i]-pos[j])%pulo[i])return -1;
		return abs(pos[i]-pos[j])/pulo[i];
	};
	L(i,0,m-1){
		L(j,0,m-1){
			if(i==j)continue;
			if((pos[i]-pos[j])%pulo[i])continue;
			adj[i].push_back({j,abs(pos[i]-pos[j])/pulo[i]});
		}
	}
	const int MOD=1e9+7;
	vector<int> dp(m,MOD);
	dp[0]=0;
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq;
	pq.push({dp[0],0});
	while(!pq.empty()){
		auto [d,v]=pq.top();
		pq.pop();
		if(d!=dp[v])continue;
		for(auto [node,w]:adj[v]){
			if(dp[node]>dp[v]+w){
				dp[node]=dp[v]+w;
				pq.push({dp[node],node});
			}
		}
	}	
	cout<<((dp[1]==MOD)?-1:dp[1]);
	
	
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(NULL);
	solve();
}
#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...