Cod sursa(job #2201301)

Utilizator dianamariaDiana Cataros dianamaria Data 4 mai 2018 09:56:24
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>

using namespace std;
ifstream in ("cerere.in");
ofstream out ("cerere.out");
const int N=100002;
int v[N],vf[N],urm[2*N],lst[N*2],nr,ans[N],str[N],nrstr;
bool viz[N];
void adauga(int x,int y)
{
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}

void dfs(int x)
{
    str[++nrstr]=x;
    if (v[x])
        ans[x]=ans[str[nrstr-v[x]]]+1;
    int p=lst[x],y;
    while (p)
    {
        y=vf[p];
        dfs(y);
        p=urm[p];
    }
    nrstr--;
}

int main()
{
    int n;
    in>>n;
    for (int i=1;i<=n;i++)
        in>>v[i];
    for (int i=1;i<n;i++)
    {
        int x,y;
        in>>x>>y;
        adauga(x,y);
        viz[y]=1;
    }
    for (int i=1;i<=n;i++)
        if (!viz[i])
            dfs(i);
    for (int i=1;i<=n;i++)
        out<<ans[i]<<" ";
    return 0;
}