Cod sursa(job #2235638)

Utilizator serjiuuAvacaritei Sergiu serjiuu Data 26 august 2018 19:51:06
Problema Cerere Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

const int NMax = 100001;

int k[NMax], ans[NMax], father[NMax], N, saiz, stec[NMax];
list <int> g[NMax];

void ReadData()
{
    int i, j;

    fin >> N;

    for(i = 1; i <= N; i++)
        fin >> k[i];

    while(fin >> i >> j)
    {
        father[j] = i;
        g[i].push_back(j);
    }
}

int Root()
{
    int i = 1;
    while(father[i])
        i++;
    ans[i] = 0;
    return i;
}

void DFS(int node, int level)
{
    list <int> :: iterator it;

    stec[level] = node;

    if(k[node])
        ans[node] = 1 + ans[stec[level - k[node]]];

    for(it = g[node].begin(); it != g[node].end(); it++)
        DFS(*it, level + 1);
}

void Print()
{
    for(int i = 1; i <= N; i++)
        fout << ans[i] << ' ';
}

int main()
{
    ReadData();
    DFS(Root(),1);
    Print();
}