Submission #1366166

#TimeUsernameProblemLanguageResultExecution timeMemory
1366166hsuan._.0528Currents (EGOI25_currents)C++20
100 / 100
181 ms27960 KiB
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pii pair<int, int>
#define F first
#define S second
const int maxn = 5e5+10;
const int mod = 998244353;
const LL inf = 1e9;

int n, m;
vector<int> v[maxn], dv[maxn];


int dis[maxn];
int vis[maxn];

vector<int> ans;

signed main() {
    ios_base::sync_with_stdio(0);  cin.tie(0);

    cin>>n>>m;
    while(m--){
        int a, b;  cin>>a>>b;
        v[a].push_back(b);
        dv[b].push_back(a);
    }

    queue< pair<int, int> > dq;
    dq.push({0, 0});
    vis[0]=1;
    while( !dq.empty() ){
        auto[x, val]=dq.front();  dq.pop();
        for(int y: v[x]){
            if(vis[y])  continue;
            vis[y] = 1;
            dis[y] = val + 1;
            dq.push({y, val+1});
        }
    }
    ans.assign(n, inf);
    priority_queue< pii, vector<pii>, greater<pii> > q;
    q.push({0, n-1});
    ans[n-1]=0;
    while( !q.empty() ){
        auto[val, x] = q.top();  q.pop();
      //  ans[x] = max(ans[x], dis[x]);
        for(int y: dv[x]){
            if(ans[y] <= ans[x]+1)  continue;
            ans[y] = max( dis[y], ans[x] + 1);
            q.push({ans[y], y});
        }
    }
  
    for(int i=0; i<n-1; i++)  cout<<ans[i]<<" ";
    
    return 0;
}

#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...