Submission #1028550

#TimeUsernameProblemLanguageResultExecution timeMemory
1028550vjudge1Jakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
1068 ms77576 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
int const N=3e4+5;
int const inf=1e9+7;

vector<int> sky[N];
int pw[N];
int pos[N];
set<pair<int,int>> vis;

int main(){
	int n,m;
	cin>>n>>m;
	for (int i = 0; i < m; ++i){
		cin>>pos[i]>>pw[i];
		sky[pos[i]].push_back(pw[i]);
	}
	int tar=pos[1];
	vector<int> in;
	in.push_back(pos[0]);
	vis.insert({pos[0],pw[0]});
	int cur=0;
	while(in.size()){
		vector<pair<int,int>> upd;
		for(int c:in){
			// cout<<"sky := "<<c<<endl;
			if(c==tar){
				cout<<cur<<endl;
				return 0;
			}
			for(int p:sky[c]){
				// cout<<p<<' ';
				if(c+p<n)
					upd.push_back({c+p,p});
				if(c-p>=0)
					upd.push_back({c-p,p});
			}
			// cout<<endl;
			sky[c].clear();
		}
		in.clear();
		// cout<<"Upd"<<endl;
		for(auto [s,p]:upd){

			if(vis.find({s,p})!=vis.end())
				continue;
			// cout<<s<<' '<<p<<endl;
			vis.insert({s,p});
			sky[s].push_back(p);
			in.push_back(s);
		}
		cur++;
		// cout<<"next"<<endl;
	}
	cout<<-1<<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...