Cod sursa(job #1429918)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 7 mai 2015 16:04:10
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>

using namespace std;

#define inFile "cerere.in"
#define outFile "cerere.out"
#define MAX_N 100000

ifstream in(inFile);
ofstream out(outFile);

int Nr[MAX_N + 1];
int Anc[MAX_N + 1];
int K[MAX_N + 1];
int S[MAX_N + 1], L;
vector < int > adjNext[MAX_N];

void DFS(int Node) {
    int i;
    Anc[Node] = S[L - K[Node]];
    Nr[Node] = Nr[Anc[Node]] + 1;
    for(i = 0; i < adjNext[Node].size(); i++) {
        S[++L] = adjNext[Node][i];
        DFS(adjNext[Node][i]);
    }
    --L;
}

int main() {
    int N, i, A, B, Node, nSon;

    in >> N;
    for(i = 1; i <= N; i++)
        in >> K[i];
    for(i = 1; i < N; i++) {
        in >> A >> B;
        adjNext[A].push_back(B);
    }

    L = 1;
    S[1] = 1;
    DFS(1);

    for(i = 1; i <= N; i++)
        out << Nr[i] - 1 << ' ';

    return 0;
}