Cod sursă (job #431601)

Utilizator avatar avramdaniel Beefichor avramdaniel IP ascuns
Problemă Evacuare (lot liceu) Compilator cpp | 0,96 kb
Rundă Arhiva de probleme Status evaluat
Dată 6 feb. 2019 23:00:00 Scor 20
#include <bits/stdc++.h>
using namespace std;

int dist[500010],z[500010],n,m,in,x,y;
queue <int> q;
vector<int> v[500010];
bool viz[500010];


int main()
{
    ifstream cin("evacuare.in");
    ofstream cout("evacuare.out");
    cin>>n>>m>>in;
    for(int i=1;i<=n;i++)
        dist[i]=m+1;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    for(int  i=1;i<=n;i++)
        cin>>z[i];
    q.push(in);
    dist[in]=0;
    while(!q.empty())
    {
        int nod = q.front();
        q.pop();
        viz[nod]=1;
        for(int i=0;i<v[nod].size();i++)
        {
            if(v[nod][i]==z[nod])
                dist[v[nod][i]] = min(dist[v[nod][i]],dist[nod]);
            else dist[v[nod][i]] = min(dist[v[nod][i]],dist[nod]+1);
            if(!viz[v[nod][i]]) q.push(v[nod][i]);
        }
    }

    for(int i=1;i<=n;i++)
        cout<<dist[i]<<'\n';


    return 0;
}