Pagini recente »
Istoria paginii utilizator/gabi_dobre
|
Diferențe pentru runda/2013-12-16-clasa-5-tema-19 între reviziile 2 și 1
|
barajyakutia2014
|
Monitorul de evaluare
|
Cod sursă (job #431294)
Cod sursă (job
#431294)
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
int n, m, x;
int nxt[1<<20], ans[1<<20];
vector<int> g[1<<20];
bool vis[1<<20];
int main() {
freopen("evacuare.in","r",stdin);
freopen("evacuare.out","w",stdout);
scanf("%d %d %d", &n, &m, &x);
x--;
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d %d", &u, &v);
v--, u--;
g[u].pb(v);
g[v].pb(u);
}
for (int i = 0; i < n; i++) {
scanf("%d", nxt + i);
nxt[i]--;
ans[i] = (1<<30);
}
ans[x] = 0;
queue<int> q;
q.push(x);
vis[x] = 1;
while (!q.empty()) {
int u = q.front();
q.pop();
vis[u] = 0;
for (auto v : g[u]) {
int cur;
if (nxt[u] == v) cur = ans[u];
else cur = ans[u] + 1;
if (cur < ans[v]) {
ans[v] = cur;
if (!vis[v]) {
q.push(v);
vis[v];
}
}
}
}
for (int i = 0; i < n; i++) {
printf("%d\n", ans[i]);
}
}