Submission #37074

#TimeUsernameProblemLanguageResultExecution timeMemory
37074leejseoJakarta Skyscrapers (APIO15_skyscraper)C++11
100 / 100
443 ms8628 KiB
#include <stdio.h> #include <algorithm> #include <vector> #include <queue> using namespace std; #define all(v) v.begin(), v.end() #define maxint 2E9 struct Node{ int u; int dist; Node (int u_, int d_) {u = u_; dist = d_;} bool operator < (const Node &a) const {return dist > a.dist;} }; int N, M; int B[30001]; int P[30001]; vector<int> V[30000]; int dist[30000]; void get_input(){ scanf("%d%d", &N, &M); for (int i=0; i<M; i++) { scanf("%d%d", &B[i], &P[i]); V[B[i]].push_back(P[i]); } for (int i=0; i<N; i++) { sort(all(V[i])); V[i].erase(unique(all(V[i])), V[i].end()); } } void dijkstra(){ for (int i=0; i<N; i++) { dist[i] = maxint; } int start = B[0]; dist[start] = 0; priority_queue<Node> Q; Q.push(Node(start, 0)); while (!Q.empty()){ int u = Q.top().u; int dist_u= Q.top().dist; Q.pop(); if (dist_u > dist[u]){ continue; } for (int i=0; i < (V[u]).size(); i++){ int power = V[u][i]; int to = u+power; int cost = dist_u + 1; while (to < N){ if (dist[to] > cost){ dist[to] = cost; Q.push(Node(to, cost)); if (binary_search(all(V[to]), power)) break; } to += power; cost += 1; } to = u-power; cost = dist_u + 1; while (to >= 0){ if (dist[to]>cost){ dist[to]=cost; Q.push(Node(to, cost)); if (binary_search(all(V[to]), power)) break; } to -= power; cost += 1; } } } } int main(){ get_input(); dijkstra(); int ans = dist[B[1]]; if (ans == maxint){ printf("-1\n"); } else{ printf("%d\n", ans); } return 0; }

Compilation message (stderr)

skyscraper.cpp: In function 'void dijkstra()':
skyscraper.cpp:50:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i=0; i < (V[u]).size(); i++){
                         ^
skyscraper.cpp: In function 'void get_input()':
skyscraper.cpp:24:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &N, &M);
                          ^
skyscraper.cpp:26:36: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &B[i], &P[i]);
                                    ^
#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...