Cod sursa(job #605800)

Utilizator crushackPopescu Silviu crushack Data 2 august 2011 01:31:43
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>
#include <assert.h>
#include <vector>
#define NMax 100010
using namespace std;

const char IN[]="cerere.in",OUT[]="cerere.out";

ifstream fin(IN); ofstream fout(OUT);

int N;
int a[NMax];
int T[NMax];
bool b[NMax];
vector<int> ad[NMax] ;
int v[NMax];

void dfs(int x=1,int niv=0)
{
    v[niv]=x;

    T[x]= a[x] ? T[v[niv-a[x]]]+1 : 0;
    for (int i=0;i<(int)ad[x].size();++i)
        dfs(ad[x][i],niv+1);
    v[niv]=0;
}

int main()
{
    int i,x,y;

    fin>>N;
    for (i=1;i<=N;++i) fin>>a[i];
    for (i=1;i<N;++i)
        fin>>x>>y,
        ad[x].push_back(y),
        b[y]=true;;

    for (i=1;b[i];++i);
    dfs(i);

    for (i=1;i<=N;++i)
        fout<<T[i]<<" ";
    fout<<"\n";

    return 0;
}