Cod sursă (job #664122)

Utilizator avatar NuSuntRoman Ispir Alexandru NuSuntRoman IP ascuns
Problemă Evacuare (lot liceu) Compilator cpp-32 | 0,96 kb
Rundă simulare Status evaluat
Dată 25 sept. 2022 18:20:38 Scor 0
#include <bits/stdc++.h>

const int NMAX = 5e5 + 5;

int n, m, f[NMAX], dist[NMAX], p[NMAX], x;
std :: vector < int > G[NMAX];
std :: queue < int > Q;

std :: ifstream fin("evacuare.in");
std :: ofstream fout("evacuare.out");

int main() {
    fin >> n >> m >> x;

    for (int i = 1, u, v; i <= m; ++ i) {
        fin >> u >> v;

        G[u].push_back(v);
        G[v].push_back(u);
    }

    for (int i = 1; i <= n; ++ i)
        fin >> p[i];

    Q.push(x);
    Q.push(p[x]);

    dist[x] = dist[p[x]] = 0;
    f[x] = f[p[x]] = true;

    while (!Q.empty()) {
        int u = Q.front();

        for (int i = 0; i < G[u].size(); ++ i) {
            int v = G[u][i];

            if (f[v] == false) {
                f[v] = true;
                dist[v] = dist[u] + 1;
                Q.push(v);
            }
        }

        Q.pop();
    }

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

    return 0;
}