제출 #787883

#제출 시각아이디문제언어결과실행 시간메모리
787883andecaandeciJakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
95 ms262144 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define keish                             ios_base::sync_with_stdio(0);       cin.tie(0); cout.tie(0)
      
using namespace std;
const int mod = 1e9 + 7;

int n, m, b, p, st, ed;

signed main(){
      keish;
      cin >> n >> m;
      vector<vector<int>> e(n);
      for(int i = 0; i < m; i++){
            cin >> b >> p;
            e[b].push_back(p);
            if(i == 0) st = b;
            if(i == 1) ed = b;
      }

      vector<vector<int>> dis(n, vector<int>(2005, -1));
      queue<pair<int, int>> q;     
      for(auto x : e[st]){
            dis[st][x] = 0;  
            q.push({st, x});
      }
      
      while(!q.empty()){
            auto [u, d] = q.front(); q.pop();

            if(u == ed){
                  cout << dis[u][d] << '\n';
                  return 0;
            }
            
            if(u + d < n){
                  if(dis[u + d][d] == -1){
                        dis[u + d][d] = dis[u][d] + 1;
                        q.push({u + d, d});
                  }
                  for(auto v : e[u + d]){
                        if(dis[u + d][v] == -1){
                              dis[u + d][v] = dis[u][d] + 1;
                              q.push({u + d, v});
                        }
                  }
            }

            if(u - d >= 0){
                  if(dis[u - d][d] == -1){
                        dis[u - d][d] = dis[u][d] + 1;
                        q.push({u - d, d});
                  }
                  for(auto v : e[u - d]){
                        if(dis[u - d][v] == -1){
                              dis[u - d][v] = dis[u][d] + 1;
                              q.push({u - d, v});
                        }
                  }
            }
      }

      cout << -1 << '\n';
}          
#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...