제출 #1275879

#제출 시각아이디문제언어결과실행 시간메모리
1275879hom84287Jakarta Skyscrapers (APIO15_skyscraper)C++20
10 / 100
1096 ms580 KiB
#include<bits/stdc++.h>
using namespace std  ; 

const int maxn = 3e4+123  , INF=1e9+7 ; 
priority_queue <pair<int,int> , vector <pair<int,int>> , greater<pair<int,int>> >dijks  ; 
vector <int> doge[maxn] ; 
int n , m ; 
int visited[maxn]  ;  

void dijk(int t){
    while(!dijks.empty()){
        auto [pay , ver] =dijks.top();
        dijks.pop() ;  
        if(ver==t){
            cout<<pay ; 
            return ; 
        } 
        if(visited[ver]==pay){
            //cout<<ver<<' '<<pay<<' ' ;
            for(int i:doge[ver]){
                for(int cnt=1+pay , verp=ver+i ; verp<n ; cnt++ , verp+=i){
                    if(visited[verp] > cnt) {
                        dijks.push({cnt , verp}) ;
                        visited[verp]=cnt ; 
                    }
                }
                for(int cnt=1+pay , verp=ver-i ; verp>=0 ; cnt++ , verp-=i){
                    if(visited[verp] > cnt) {
                        dijks.push({cnt , verp}) ;
                        visited[verp]=cnt ; 
                    }    
                } 
                doge[ver].clear() ; 
                doge[ver].shrink_to_fit(); 
            }
            //cout<<bfs.size()<<'\n'; 
        } 
    }
    cout<<-1 ;
}
int main(){
    cin>>n>>m ;
    fill(visited , visited+n+1 , INF) ; 
    int loc , p;  
    cin>>loc>>p ; 
    doge[loc].push_back(p) ;
    dijks.push({0,loc}) ;
    visited[loc]=0 ;  
    cin>>loc>>p ; 
    for(int i=2 ; i<m ;i++){
        int loco;
        cin>>loco>>p ;
        doge[loco].push_back(p) ;  
    }
    dijk(loc) ;
}
#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...