Cod sursa(job #1268654)

Utilizator AdrianaMAdriana Moisil AdrianaM Data 21 noiembrie 2014 11:25:43
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream is("cerere.in");
ofstream os("cerere.out");

int n, cnt;
vector<int> k, t;

void READ();
void FIND(int nod, int w);

int main()
{
    READ();
    for ( int i = 1; i <= n; ++i )
    {
        cnt = 0;
        if ( k[i] )
        {
            FIND(t[i], k[i] - 1);
        }
        os << cnt << " ";
    }
    is.close();
    os.close();
    return 0;
}

void FIND(int nod, int w)
{
    if ( !w )
    {
        ++cnt;
        if ( k[nod] )
            FIND(t[nod], k[nod - 1]);
        return;
    }
    if ( !t[nod] )
    {
        ++cnt;
        return;
    }
    FIND(t[nod], w - 1);
}

void READ()
{
    int a, b;
    is >> n;
    k.resize(n + 1);
    t.resize(n + 1);
    for ( int i = 1; i <= n; ++i )
        is >> k[i];
    for ( int i = 1; i < n; ++i )
    {
        is >> a >> b;
        t[b] = a;
    }
}