Submission #683759

#TimeUsernameProblemLanguageResultExecution timeMemory
683759speedyArdaJakarta Skyscrapers (APIO15_skyscraper)C++14
0 / 100
2 ms2432 KiB
#include "bits/stdc++.h" using namespace std; const int MAXN = 3e4+5; vector<set< int> > adj(MAXN); vector< vector < int > > doges(MAXN); int dp[MAXN]; map< pair<int, int>, bool > done; bool visited[MAXN]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; int goal, begin; for(int i = 0; i < m; i++) { pair<int, int> temp; cin >> temp.first >> temp.second; if(i == 1) goal = temp.first; else if(i == 0) begin = temp.first; doges[temp.first].push_back(temp.second); } for(int i = 0; i <= n; i++) { dp[i] = 1e9; visited[i] = false; } visited[begin] = false; dp[begin] = 0; set< pair<int, int> > curr; curr.insert({0, begin}); int ans = 1e9; while(!curr.empty()) { pair<int, int> temp = *(curr.begin()); int v = temp.second; int len = temp.first; // cout << v << "\n"; curr.erase(curr.begin()); if(v == goal) ans = min(len, ans); if(!visited[v]) // Add its edges { for(int doge : doges[v]) { //if(v == 4) // cout << doge << "\n"; //if(done[{v, doge}]) //continue; int curr = v; while(curr + doge < n) { if(done[{curr, curr + doge}]) break; done[{curr, doge}] = true; adj[curr].insert(curr + doge); curr += doge; } curr = v; while(curr - doge >= 0) { if(done[{curr, curr - doge}]) break; //if(v == 4) //cout << curr << "\n"; done[{curr, curr - doge}] = true; adj[curr].insert(curr - doge); curr -= doge; } } } visited[v] = true; for(int e : adj[v]) { //if(dp[e] > len + 1) //{ curr.erase({dp[e], e}); dp[e] = len + 1; curr.insert({dp[e], e}); //} } adj[v].clear(); dp[v] = 1e9; } cout << ans << "\n"; }

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:45:9: warning: 'goal' may be used uninitialized in this function [-Wmaybe-uninitialized]
   45 |         if(v == goal)
      |         ^~
#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...