Submission #48170

#TimeUsernameProblemLanguageResultExecution timeMemory
48170WA_TLEJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1083 ms77372 KiB
#include<deque>
#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>
#include<set>
#include<cmath>
#include<tuple>
#include<string>
#include<chrono>
#include<functional>
#include<iterator>
#include<random>
#include<unordered_set>
#include<array>
#include<map>
#include<iomanip>
#include<assert.h>
using namespace std;
typedef long long int llint;
typedef long double lldo;
#define mp make_pair
#define mt make_tuple
#define pub push_back
#define puf push_front
#define pob pop_back
#define pof pop_front
#define fir first
#define sec second
#define res resize
#define ins insert
#define era erase
//cout<<setprecision(20)
//cin.tie(0);
//ios::sync_with_stdio(false);
const llint mod=1000000007;
const llint big=4.19e18+1;
const long double pai=3.141592653589793238462643383279502884197;
const long double eps=1e-15;
template <class T,class U>void mineq(T& a,U b){if(a>b){a=b;}}
template <class T,class U>void maxeq(T& a,U b){if(a<b){a=b;}}
llint gcd(llint a,llint b){if(a%b==0){return b;}else return gcd(b,a%b);}
llint lcm(llint a,llint b){return a/gcd(a,b)*b;}
template<class T> void SO(T& ve){sort(ve.begin(),ve.end());}
template<class T> void REV(T& ve){reverse(ve.begin(),ve.end());}
int LBI(vector<int>&ar,llint in){return lower_bound(ar.begin(),ar.end(),in)-ar.begin();}
int UBI(vector<int>&ar,llint in){return upper_bound(ar.begin(),ar.end(),in)-ar.begin();}
int main(void){
	//0-1 dfs
	int n,m,i;cin>>n>>m;
	vector<vector<int>>go(n);
	int stb,stp,enb;
	for(i=0;i<m;i++){
		int b,p;cin>>b>>p;
		if(i==0){stb=b;stp=p;}
		if(i==1){enb=b;}
		go[b].pub(p);
	}
	vector<unordered_set<int>>used(n);
	deque<tuple<int,int,int,bool>>que;
	que.pub(mt(stb,stp,0,true));
	que.pub(mt(stb,stp,0,false));
	used[stb].ins(stp);
	while(que.size()>0){
		int b,p,t;bool mu;tie(b,p,t,mu)=que.front();
		que.pof();
		if(b==enb){cout<<t<<endl;return 0;}
		//cerr<<"de"<<b<<" "<<p<<" "<<t<<endl;
		used[b].ins(p);
		if(go[b].size()>0){
			for(auto it:go[b]){que.puf(mt(b,it,t,true));que.puf(mt(b,it,t,false));}
			go[b].clear();
		}
		if(mu&&b+p<n&&used[b+p].count(p)==0){
			que.pub(mt(b+p,p,t+1,true));
			used[b+p].ins(p);
		}
		if((!mu)&&b-p>=0&&used[b-p].count(p)==0){
			que.pub(mt(b-p,p,t+1,false));
			used[b-p].ins(p);
		}
	}
	cout<<"-1"<<endl;
	return 0;
}

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:63:10: warning: 'stb' may be used uninitialized in this function [-Wmaybe-uninitialized]
  used[stb].ins(stp);
          ^
skyscraper.cpp:67:3: warning: 'enb' may be used uninitialized in this function [-Wmaybe-uninitialized]
   if(b==enb){cout<<t<<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...