Cod sursa(job #1256294)

Utilizator japjappedulapPotra Vlad japjappedulap Data 6 noiembrie 2014 01:58:56
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;

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

int N, v[100004], S[100004], D[100004], K = 1;
vector <int> G[100004];
bitset <100004> B;

void DFS(int t);

int main()
{
    is >> N;
    for (int i = 1; i <= N; ++i)
        is >> v[i];
    for (int i = 1, a, b; i < N; ++i)
    {
        is >> a >> b;
        G[a].push_back(b);
    }
    DFS(1);
    for (int i = 1; i <= N; ++i)
        os << D[i] << ' ';
    is.close();
    os.close();
}

void DFS(int t)
{
    S[++K] = 0;
    B[t] = 1;
    for (const auto& f : G[t])
        if (B[f] == 0)
        {
            if (v[f] != 0)
                S[K] = S[K-v[f]]+1;
            D[f] = S[K];
            DFS(f);
        }
    S[--K] = 0;
};