Cod sursa(job #953047)

Utilizator primulDarie Sergiu primul Data 24 mai 2013 18:25:20
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <vector>
 
using namespace std;
 
ifstream in ("cerere.in");
ofstream out ("cerere.out");
 
const int MAXN = 100010;
 
vector <int> Graf[MAXN];
int V[MAXN], St[MAXN], Sol[MAXN];
bool Intra[MAXN];
int now;
 
void DFS (int nod)
{
    St[++ now] = nod;
 
    if (V[nod])
        Sol[nod] = Sol[St[now - V[nod]]] + 1;
 
    for (auto it = Graf[nod].begin (); it != Graf[nod].end (); ++ it)
        DFS (*it);
 
    -- now;
}
 
int main()
{
    int N, a, b, i;
 
    in >> N;
    for (i = 1; i <= N; i ++)
        in >> V[i];
 
    for (i = 1; i < N; i ++){
        in >> a >> b;
        Intra[b] = 1;
        Graf[a].push_back (b);
    }
 
    for (i = 1; i <= N; i ++)
        if (!Intra[i])
            break;
 
    DFS (i);
 
    for (i = 1; i <= N; i ++)
        out << Sol[i] << " ";
 
    return 0;
}