제출 #1345408

#제출 시각아이디문제언어결과실행 시간메모리
1345408Francisco_MartinCurrents (EGOI25_currents)C++20
100 / 100
255 ms32776 KiB
//EGOI 2025 Currents
//https://qoj.ac/contest/2344/problem/13170

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using pll = pair<ll,ll>;
using vpll = vector<pll>;

int main(){
    ll n, m, a, b;
    cin >> n >> m;
    vll g[n], gr[n], dis(n,-1); dis[0]=0;
    for(int i=0; i<m; i++){
        cin >> a >> b;
        g[a].push_back(b); gr[b].push_back(a);
    }
    queue<ll> q; q.push(0); vll ans(n,1e18); ans[n-1]=0;
    while(!q.empty()){
        auto v=q.front(); q.pop();
        for(auto u:g[v]) if(dis[u]==-1) q.push(u), dis[u]=dis[v]+1;
    }
    priority_queue<pll,vpll,greater<pll>> pq; pq.push({0,n-1});
    while(!pq.empty()){
        auto [w,v]=pq.top(); pq.pop();
        if(w>ans[v]) continue;
        for(auto u:gr[v]){
            ll x=max(dis[u],w+1);
            if(x<ans[u]) ans[u]=x, pq.push({x,u});
        }
    }
    for(int i=0; i<n-1; i++) cout << ans[i] << " ";
    cout << "\n";
    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...
#Verdict Execution timeMemoryGrader output
Fetching results...