제출 #155317

#제출 시각아이디문제언어결과실행 시간메모리
155317dantoh000Jakarta Skyscrapers (APIO15_skyscraper)C++14
0 / 100
28 ms21496 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)); int cur = b*k; while (cur >= p*k){ adjlist[cur+p].push_back(ii(cur-p*k + p,1)); cur -= p*k; } cur = b*k; while (cur +p*k < n*k){ adjlist[cur+p].push_back(ii(cur+p*k + p,1)); cur += p*k; } } } 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; //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; }

컴파일 시 표준 에러 (stderr) 메시지

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:50:32: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
                     if (v >= 0 && dist[v] == -1 || dist[v] > dist[u]+i){
                         ~~~~~~~^~~~~~~~~~~~~~~~
skyscraper.cpp:55:33: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
                     if (v < n*k && dist[v] == -1 || dist[v] > dist[u]+i){
                         ~~~~~~~~^~~~~~~~~~~~~~~~
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...