Cod sursa(job #863063)

Utilizator Coman95coman cosmin Coman95 Data 23 ianuarie 2013 11:42:10
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>
using namespace std;

#define MAXN 100001

ifstream fin("cerere.in");
ofstream fout("cerere.out");

int n;
vector<int> G[MAXN];
int v[MAXN], t[MAXN], sol[MAXN], arb[MAXN];

void DFS( int nod, int niv );

int main()
{
    int x, y;
    fin >> n;
    for( int i = 1; i <= n ; ++i )
        fin >> v[i];
    for( int i = 1; i < n; ++i )
    {
        fin >> x >> y;
        t[y] = x;
        G[x].push_back( y );
    }
    int root = 1;
    while( t[root] != 0 )
        root = t[root];
    DFS( root, 1 );
    for( int i = 1; i <= n; ++i )
        fout << sol[i] - 1 << ' ';
    fin.close();
    fout.close();
    return 0;
}

void DFS( int nod, int niv )
{
    arb[niv] = nod;
    if( v[nod] == 0 )
        sol[nod] = 1;
    else
        sol[nod] = 1 + sol[arb[niv-v[nod]]];
    for( vector<int>::iterator it = G[nod].begin(); it != G[nod].end(); ++it )
        DFS( *it, niv + 1 );
}