Cod sursă (job #431653)

Utilizator avatar avramdaniel Beefichor avramdaniel IP ascuns
Problemă Evacuare (lot liceu) Compilator cpp | 1.13 kb
Rundă lasm_05_02_2019_10_12 Status evaluat
Dată 6 feb. 2019 23:32:34 Scor 100
#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;
    viz[in]=0;
    while(!q.empty())
    {
        int nod = q.front();
        for(int i=0;i<v[nod].size();i++)
        {
            x=dist[nod];
            if(z[nod]!=v[nod][i]) x++;
            if(dist[v[nod][i]]>x)
            {
                dist[v[nod][i]] = x;
                if(!viz[v[nod][i]])
                {
                    viz[nod]=1;
                    q.push(v[nod][i]);
                }
            }
        }
        viz[nod]=0;
        q.pop();
    }

    for(int i=1;i<=n;i++)
    {
        if(dist[i]==m+1) cout<<0<<'\n';
            else cout<<dist[i]<<'\n';
    }


    return 0;
}