Cod sursa(job #945767)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 2 mai 2013 21:17:01
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

const int MAXN = 100010;

vector <int> Graf[MAXN];
int V[MAXN], St[MAXN], Sol[MAXN];
bool Intra[MAXN];
int now;

void DFS (int nod)
{
    St[++ now] = nod;

    if (V[nod])
        Sol[nod] = Sol[St[now - V[nod]]] + 1;

    for (auto it = Graf[nod].begin (); it != Graf[nod].end (); ++ it)
        DFS (*it);

    -- now;
}

int main()
{
    int N, a, b, i;

    in >> N;
    for (i = 1; i <= N; i ++)
        in >> V[i];

    for (i = 1; i < N; i ++){
        in >> a >> b;
        Intra[b] = 1;
        Graf[a].push_back (b);
    }

    for (i = 1; i <= N; i ++)
        if (!Intra[i])
            break;

    DFS (i);

    for (i = 1; i <= N; i ++)
        out << Sol[i] << " ";

    return 0;
}