Cod sursa(job #413941)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 9 martie 2010 14:34:00
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream>
#include<cstdio>
#define MAX 100001
using namespace std;
struct nod{
    int info;
    nod *next;
};

int c[MAX],niv[MAX],r[MAX],n,x;
nod *G[MAX];

void addmuchie(int x,int y)
{
    nod *p=new nod;
    p->info=y;
    p->next=G[x];
    G[x]=p;
}

void dfs(int k)
{
    x++;
    niv[x]=k;
    if(c[k]!=0)
        r[k]=niv[x-c[k]];
    for(nod *p=G[k] ; p ;p=p->next)
            dfs(p->info);
    x--;
}

int cate(int k)
{
    int rez=0;
    while(r[k]!=0)
        rez++,k=r[k];
    return rez;
}

int main()
{
    int i;
    ifstream fin("cerere.in");
    freopen("cerere.out","w",stdout);
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>c[i];
    for(i=1;i<n;i++)
    {
        int x,y;
        fin>>x>>y;
        addmuchie(x,y);
    }
    dfs(1);
    for(i=1;i<=n;i++)
    {
        printf("%d ",cate(i));
    }
    return 0;
}