제출 #1348482

#제출 시각아이디문제언어결과실행 시간메모리
1348482nathlol2Jakarta Skyscrapers (APIO15_skyscraper)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 5, INF = 2e9;
int n, m, b[N], p[N], dist[30005][N];
vector<int> v[N];
deque<tuple<int, int, int>> q;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    cin >> n >> m;
    for(int i = 1;i<=m;i++){
        cin >> b[i] >> p[i];
        v[b[i]].push_back(i);
    }
    for(int i = 1;i<=m;i++) for(int j = 0;j<n;j++) dist[i][j] = INF;
    dist[1][b[1]] = 0;
    q.push_front({0, 1, b[1]});
    while(!q.empty()){
        auto [d, id, u] = q.front();
        q.pop_front();
        for(auto x : v[u]){
            if(dist[x][u] > d){
                dist[x][u] = d;
                q.push_front({d, x, u});
            }
        }
        if(u - p[id] >= 0 && dist[id][u - p[id]] > d + 1){
            dist[id][u - p[id]] = d + 1;
            q.push_back({d + 1, id, u - p[id]});
        }
        if(u + p[id] < n && dist[id][u + p[id]] > d + 1){
            dist[id][u + p[id]] = d + 1;
            q.push_back({d + 1, id, u + p[id]});
        }
    }
    cout << dist[2][b[2]];
}
#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...