Cod sursa(job #1429979)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 7 mai 2015 18:07:35
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 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 Index[MAX_N + 1];
int K[MAX_N + 1];
int S[MAX_N + 1], L;
vector < int > adjNext[MAX_N + 1];
  
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;
    while(L) {
        if(!Index[S[L]]) Nr[S[L]] = Nr[S[L - K[S[L]]]] + 1;
        if(Index[S[L]] < adjNext[S[L]].size()) {
            S[L+1] = adjNext[S[L]][Index[S[L]]];
            Index[S[L]]++;
            L++;
        }
        else --L;
    }
 
    for(i = 1; i <= N; i++)
        out << Nr[i] - 1 << ' ';
 
    return 0;
}