Submission #612582

#TimeUsernameProblemLanguageResultExecution timeMemory
612582JomnoiJakarta Skyscrapers (APIO15_skyscraper)C++17
0 / 100
3 ms2440 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAX_N = 3e4 + 5;
const int INF = 1e9 + 7;

int B[MAX_N], P[MAX_N];
map <int, int> dist[MAX_N];
vector <int> graph[MAX_N];

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);

    int N, M;
    cin >> N >> M;

    for(int i = 0; i < M; i++) {
        cin >> B[i] >> P[i];

        graph[B[i]].push_back(i);
    }

    queue <pair <int, int>> q;
    q.emplace(B[0], P[0]);
    dist[B[0]][P[0]] = 0;
    while(!q.empty()) {
        auto [b, p] = q.front();
        q.pop();

        if(b - p >= 0 and !dist[b - p].count(p)) {
            dist[b - p][p] = dist[b][p] + 1;
            q.emplace(b - p, p);
        }
        if(b + p < N and !dist[b + p].count(p)) {
            dist[b + p][p] = dist[b][p] + 1;
            q.emplace(b + p, p);
        }

        for(auto i : graph[b]) {
            if(!dist[b].count(P[i])) {
                dist[b][P[i]] = dist[b][p];
                q.emplace(b, P[i]);
            }
        }
    }

    int ans = INF;
    for(int i = 0; i <= 30000; i++) {
        if(dist[B[1]].count(i)) {
            ans = min(ans, dist[B[1]][i]);
        }
    }
    cout << ans;
    return 0;
}
#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...