Cod sursa(job #1061187)

Utilizator mariacMaria Constantin mariac Data 19 decembrie 2013 13:52:15
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.98 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];
int s[100005];
int top;
void DF(int r)
{
    int i;
    int l = lv[r].size();
    s[++top] = r;
    for( i = 0; i < l; i++)
        {
            int x;
            x = lv[r][i];
            if( !v[ x])
                if(str[x])v[ x] = v[s[top - str[x]+1]] + 1;
                    else v[x] = 1;
            DF(x);
        }
    --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;
}