Cod sursa(job #2917006)

Utilizator florinrafiliuRafiliu Florin florinrafiliu Data 2 august 2022 17:35:26
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

ifstream fin ("bfs.in");
ofstream fout ("bfs.out");

const int maxN = 1e5 + 5;
const int INF = 1e9;

int dist[maxN];
vector <int> g[maxN];

void bfs (int root) {
    priority_queue <pair<int,int>> q;

    q.push({0, root});
    dist[root] = 0;

    while(!q.empty()) {
        int node = q.top().second;

        for(auto to : g[node])
            if(dist[to] > dist[node] + 1) {
                dist[to] = dist[node] + 1;
                q.push({-dist[to], to});
            }
        q.pop();
    }
}

int main()
{
    int n, m, root;
    fin >> n >> m >> root;

    for(int i = 1; i <= m; ++i) {
        int u, v; fin >> u >> v;
        g[u].push_back(v);
    }

    for(int i = 1; i <= n; ++i)
        dist[i] = INF;

    bfs(root);

    for(int i = 1; i <= n; ++i)
        if(dist[i] == INF)
            fout << "-1 ";
        else
            fout << dist[i] << " ";

    return 0;
}