Cod sursa(job #1036209)

Utilizator mariacMaria Constantin mariac Data 19 noiembrie 2013 01:20:59
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int N, str[100005];
int v[100005];
vector<int> lv[100005];
stack<int> s;
int top;
void DF(int r)
{
    int i;
    int l = lv[r].size();
    s.push(r);
    top++;
    for( i = 0; i < l; i++)
        {
            int x;
            x = lv[r][i];
            if( !v[ x]) v[ x] = v[ top - 1 - str[x]] + 1;
            DF(x);
        }
    s.pop();
    top--;
}

int main()
{
    int i, sol = 0, N, x, r;
    fin>> N;

    for(i = 1; i <= N; i++)
        fin>>str[i];

    for(i = 1; i < N; i++)
    {
        int x, y;
        fin >> x>> y;
        lv[x].push_back(y);
        v[y] = 1;
    }
    for( i = 1; i <= N; i++)
        if(!v[i]) r = i;
            else v[i] = 0;
    v[r] = 1;
    DF( r);

    for( i = 1; i <= N; i++)
        fout<<v[i] - 1<<" ";


    return 0;
}