Submission #106754

#TimeUsernameProblemLanguageResultExecution timeMemory
106754brcodeJakarta Skyscrapers (APIO15_skyscraper)C++14
36 / 100
481 ms263168 KiB
#include <iostream> #include <queue> #include <set> #include <vector> using namespace std; priority_queue<pair<int,int>> q1; const int MAXN = 30010; set<int> v1[MAXN]; vector<pair<int,int>> g[MAXN]; vector<pair<int,int>> v2; bool visited[MAXN]; int dp[MAXN]; int target; int first,jump; int main(){ int n,m; cin>>n>>m; for(int i=0;i<m;i++){ int b,p; cin>>b>>p; if(i== 0){ first = b; jump = p; } if(i == 1){ target = b; } v2.push_back(make_pair(b,p)); v1[b].insert(p); } for(int i=0;i<m;i++){ int b = v2[i].first; int p = v2[i].second; int count = 1; for(int i=b+p;i<=n;i+=p){ if(v1[i].find(p) != v1[i].end()){ g[b].push_back(make_pair(i,count)); break; } g[b].push_back(make_pair(i,count)); count++; } count = 1; for(int i=b-p;i>=0;i-=p){ if(v1[i].find(p) != v1[i].end()){ g[b].push_back(make_pair(i,count)); break; } g[b].push_back(make_pair(i,count)); count++; } } q1.push(make_pair(0,first)); for(int i=0;i<=n;i++){ dp[i] = 1e9; } dp[first] = 0; while(!q1.empty()){ auto hold = q1.top(); int skyscraper = hold.second; int dist = -1*hold.first; q1.pop(); if(skyscraper == target){ cout<<dist<<endl; return 0; } if(visited[skyscraper]){ continue; } visited[skyscraper] = true; for(auto x:g[skyscraper]){ int w = x.second; int to = x.first; if(dp[to]>dp[skyscraper]+w){ dp[to] = dp[skyscraper]+w; q1.push(make_pair(-1*dp[to],to)); } } } cout<<-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...