Cod sursa(job #1933368)

Utilizator jurjstyleJurj Andrei jurjstyle Data 20 martie 2017 17:51:00
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("cerere.in");
ofstream g("cerere.out");


vector <int> Graph[100002];
int N, radacina, grad_interior[100002];
int Stramosi[100002];
int G[100002];
int St[100002], varf;


void DFS(int node)
{
    St[++varf] = node;
    if (Stramosi[node] == 0)
        G[node] = 0;
    else
        G[node] = G[St[varf - Stramosi[node]]] + 1;
    for (const int & x : Graph[node])
        DFS(x);
    --varf;
}


int main()
{
    f >> N;
    for (int i = 1; i <= N; ++i)
        f >> Stramosi[i];
    for (int i = 1; i < N; ++i)
    {
        int x, y;
        f >> x >> y;
        Graph[x].push_back(y);
        ++grad_interior[y];
    }
    for (int i = 1; i <= N; ++i)
        if (grad_interior[i] == 0)
            radacina = i;
    DFS(radacina);
    for (int i = 1; i <= N; ++i)
        g << G[i] << " ";
    f.close();
    g.close();
    return 0;
}