Cod sursa(job #1291079)

Utilizator stefanzzzStefan Popa stefanzzz Data 12 decembrie 2014 10:45:45
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <vector>
#define MAXN 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");

int n, dep[MAXN], tata[MAXN], rad, sol[MAXN], x, y;
vector<int> G[MAXN], stramosi;

void DFS(int p);

int main()
{
    int i;

    f >> n;
    for(i = 1; i <= n; i++)
        f >> dep[i];

    for(i = 1; i < n; i++){
        f >> x >> y;
        tata[y] = x;
        G[x].push_back(y);
    }

    for(i = 1; i <= n; i++)
        if(!tata[i]){
            rad = i;
            break;
        }

    DFS(rad);

    for(i = 1; i <= n; i++)
        g << sol[i] << ' ';
    f.close();
    g.close();
    return 0;
}

void DFS(int p){
    int i;
    if(dep[p] == 0)
        sol[p] = 0;
    else
        sol[p] = sol[stramosi[stramosi.size() - dep[p]]] + 1;

    stramosi.push_back(p);

    for(i = 0; i < G[p].size(); i++)
        DFS(G[p][i]);

    stramosi.pop_back();
}