Cod sursa(job #927692)

Utilizator superman_01Avramescu Cristian superman_01 Data 25 martie 2013 22:59:10
Problema Cerere Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>
#include<vector>

#define NMAX 100005

FILE *f=fopen("cerere.in","r");
FILE *g=fopen("cerere.out","w");

using namespace std;

vector <int> arb[NMAX];

int v[NMAX],fat[NMAX],n,sol[NMAX];
int r,stack[NMAX];

void read( void )
{
    fscanf(f,"%d",&n);
    for(int i(1); i <= n ; ++i )

        fscanf(f,"%d",&v[i]);
    r=n*(n+1)/2;
    for(int i(1); i < n ; ++i )
    {
        int x,y;
        fscanf(f,"%d%d",&x,&y);
        fat[y]=x;
        r-=y;
        arb[x].push_back(y);
    }
    fclose(f);
}
void DFS(int node, int len )
{
    if( v[node] == 0 )
    {
        sol[node]=0;
    }
    else
    {
        sol[node]=sol[stack[ len - v[node] ]] +1;

    }
     stack[len]=node;
     for(int i(0); i <arb[node].size(); ++i )
        DFS(arb[node][i],len+1);


}
void write( void )
{
    for(int i(1); i <= n  ; ++i )
        fprintf(g,"%d ",sol[i]);
    fclose(g);


}
int main ( void )
{
    read();
    DFS(r,1);
    write();
    return 0;
}