Cod sursa(job #1429981)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 7 mai 2015 18:08:21
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 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 + 1];
 
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;
}