Submission #155396

#TimeUsernameProblemLanguageResultExecution timeMemory
155396dantoh000Jakarta Skyscrapers (APIO15_skyscraper)C++14
0 / 100
20 ms21436 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; unordered_map<int,vector<ii> > adjlist; int dist[5200000]; vector<int> big[30005]; int n,m; int k; int s; int e; int main(){ scanf("%d%d",&n,&m); k = sqrt(n); for (int i = 0; i < m; i++){ int b,p; scanf("%d%d",&b,&p); if (i == 0) s = b; if (i == 1) e= b; if (p >= k){ big[b].push_back(p); } else{ adjlist[b*k].push_back(ii(b*k+p,0)); adjlist[b*k+p].push_back(ii(b*k,0)); } } priority_queue<ii,vector<ii>,greater<ii> > pq; memset(dist,-1,sizeof(dist)); dist[s*k] = 0; pq.push(ii(0,s*k)); while (pq.size()){ ii cur = pq.top(); pq.pop(); int d = cur.first, u = cur.second; if (e*k == u) break; //printf("%d %d\n",d,u); if (dist[u] > d) continue; if (u % k == 0){ for (auto x : big[u/k]){ for (int i = 1; i <= k; i++){ int v = u-(i*x)*k; if (v >= 0 && (dist[v] == -1 || dist[v] > dist[u]+i)){ dist[v] = dist[u]+i; pq.push(ii(dist[v],v)); } v = u+(i*x)*k; if (v < n*k && (dist[v] == -1 || dist[v] > dist[u]+i)){ dist[v] = dist[u]+i; pq.push(ii(dist[v],v)); } } } } for (auto v : adjlist[u]){ //printf("maybe %d %d\n",v.first,v.second); if (dist[v.first] == -1 || dist[v.first] > dist[u]+v.second){ dist[v.first] = dist[u]+v.second; pq.push(ii(dist[v.first],v.first)); } } } printf("%d",dist[e*k]); return 0; }

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:12:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&m);
     ~~~~~^~~~~~~~~~~~~~
skyscraper.cpp:16:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&b,&p);
         ~~~~~^~~~~~~~~~~~~~
#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...