Cod sursa(job #1429921)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 7 mai 2015 16:13:40
Problema Cerere Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 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;
    long long Sum = 0;

    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);
        Sum += B;
    }

    L = 1;
    S[1] = (long long)N*(N+1)/2 - Sum;
    DFS(S[1]);

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

    return 0;
}