제출 #695272

#제출 시각아이디문제언어결과실행 시간메모리
6952723omar_ahmedJakarta Skyscrapers (APIO15_skyscraper)C++17
36 / 100
1085 ms1876 KiB
/**
 * author: 3omar_ahmed
 * date: 04-02-2023
 * Expert When :)
 */
#include <ext/rope>
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std ;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
template<class x> using ordered_set = tree<x, null_type,less<x>, rb_tree_tag,tree_order_statistics_node_update>;
#define int long long
#define endl '\n'
#define all(a) a.begin() , a.end()
#define alr(a) a.rbegin() , a.rend()
const int N = 2e3 + 5;
int n, m;
vector < int > dis(N, INT_MAX);
vector < set < int > > possible(N);
int aa, bb;
int dij(int from, int to){
    priority_queue<pair < int ,int >> p;
    p.push({0 , from});
    dis[from] = 0;
    while(p.size()){
        auto node = p.top();
        p.pop();
        for(auto child : possible[node.second]){
            bool f1 = 0, f2 = 0;
            for(int i = 1, nod1 = i * child + node.second; ; i++, 
                                    nod1 = i * child + node.second){
                if(nod1 < n && dis[nod1] > node.first + i){
                    dis[nod1] = node.first + i ;
                    p.push({node.first + i, nod1});
                    if(possible[nod1].find(child) != 
                       possible[nod1].end())
                        break;
                } else if(nod1 >= n) break;
            }
            for(int i = 1, nod2 = -i * child + node.second; ; i++, 
                                    nod2 = -i * child + node.second){
                if(!f2 && nod2 >= 0 && dis[nod2] > node.first + i){
                    dis[nod2] = node.first + i ;
                    p.push({node.first + i, nod2});
                    if(possible[nod2].find(child) != 
                       possible[nod2].end())
                        break;
                } else if(nod2 < 0) break;
            }
        }
    }
    return dis[to];
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0);

    cin >> n >> m;
    int from = 0 , to = 1;
    for(int i = 0; i < m; i++){
        int b , p; cin >> b >> p;
        (i == 0? aa = b : (i == 1? bb = b : bb = bb));
        possible[b].insert(p);
    }
    int dist = dij(aa, bb);
    cout << (dist == INT_MAX? -1 : dist);
    return 0 ;
}

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

skyscraper.cpp: In function 'long long int dij(long long int, long long int)':
skyscraper.cpp:31:18: warning: unused variable 'f1' [-Wunused-variable]
   31 |             bool f1 = 0, f2 = 0;
      |                  ^~
skyscraper.cpp: In function 'int main()':
skyscraper.cpp:60:9: warning: unused variable 'from' [-Wunused-variable]
   60 |     int from = 0 , to = 1;
      |         ^~~~
skyscraper.cpp:60:20: warning: unused variable 'to' [-Wunused-variable]
   60 |     int from = 0 , to = 1;
      |                    ^~
#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...