Cod sursa(job #1438737)

Utilizator sorincusmareIacob Sorin sorincusmare Data 20 mai 2015 18:35:31
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int nr=0,vf[100001],lst[100001],urm[100001],rez[100001],c[100001],k[100001],v[100001];

void adauga (int x,int y)
{
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}
void dfs (int x)
{
    int p,y;
    v[++nr]=x;
    //viz[x]=true;
    if (c[x] != 0)
    {
        rez[x]=1+rez[v[nr-c[x]]];
        //g << "il calculez pe " << x << " in functie de "
    }
    p=lst[x];
    while (p!=0)
    {
        y=vf[p];
        dfs(y);
        p=urm[p];
    }
    nr--;
}
int main()
{
    int x,y,i,n;
    f>>n;
    for(i=1; i<=n; i++)
        f>>c[i];
    for(i=1; i<=n-1; i++)
    {
        f>>x>>y;
        k[y]=1;
        adauga(x,y);
        //adauga(y,x);
    }
    nr = 0;
    for(i=1; i<=n; i++)
        if(k[i]==0)
            dfs(i);
    for(i=1; i<=n; i++)
        g<<rez[i]<<" ";
}