Cod sursa(job #1464981)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 26 iulie 2015 11:16:42
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <vector>
#define NMAX 100001

using namespace std;

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

int stiva[NMAX], dist[NMAX], k[NMAX], visited[NMAX], father[NMAX], i, n, a, b, m = 0;
vector < int > v[NMAX];

void read()
{
    f >> n;

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

    for (i = 1; i <= n-1; ++ i)
    {
        f >> a >> b;
        father[b] = a;
        v[a].push_back(b);
    }
}

int first_father()
{
    for (i = 1; i <= n; ++ i)
        if (father[i] == 0) return i;
}

void DFS(int node, int level)
{
    stiva[level] = node;
    dist[node] = dist[stiva[level-k[node]]] + 1;

    for (vector < int > :: iterator it = v[node].begin(); it != v[node].end(); ++it)
        DFS(*it,level+1);
}

void write()
{
    for (i = 1; i <=n ; ++ i)
        g << dist[i]-1 << " ";
}

int main()
{
    read();
    DFS(first_father(),1);
    write();
    return 0;
}