Pagini recente »
Borderou de evaluare (job #182015)
|
Istoria paginii runda/lasm_25_05_2022_cl10_11/clasament
|
Cod sursă (job #664070)
|
Istoria paginii runda/antrenament111
|
Cod sursă (job #664125)
Cod sursă (job
#664125)
#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] << "\n";
return 0;
}