Cod sursă (job #466148)

Utilizator avatar DimaTC grelype DimaTC IP ascuns
Problemă Evacuare (lot liceu) Compilator cpp | 0,96 kb
Rundă lasm_03_04_2019_10_12 Status evaluat
Dată 4 apr. 2019 13:32:33 Scor 100
#include<bits/stdc++.h>
#define N 500010
#define x first
#define y second
#define pii pair<int,int>
using namespace std;

int n,m,X;
int viz[N];
vector<int>V[N];
int rs[N];
int p[N];
queue<int>Q;
const int inf=1e9;

void BFS(int x) {
    viz[x]=1;
    Q.push(x);
    while (Q.size()) {
        x=Q.front();
        Q.pop();
        for (int i=0; i<V[x].size(); i++) {
            int y=V[x][i],  v;
            if (p[x]==y) v=viz[x];
                else v=viz[x]+1;
            if (viz[y]>v) {
                viz[y]=v;
                Q.push(y);
            }
        }
    }
}

int main() {
    ifstream cin("evacuare.in");
    ofstream cout("evacuare.out");
    cin>>n>>m>>X;

    for (int i=1; i<=m; i++) {
        int x,y; cin>>x>>y;
        V[x].push_back(y);
        V[y].push_back(x);
    }
    for (int i=1; i<=n; i++) cin>>p[i], viz[i]=inf;

    BFS(X);
    for (int i=1; i<=n; i++) cout<<viz[i]-1<<'\n';

    return 0;
}