Cod sursa(job #902771)

Utilizator otto1Palaga Vicentiu-Octavian otto1 Data 1 martie 2013 16:38:30
Problema Rubarba Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector<int>g[100001];
int k[100001], t[100001], sol[100001], arb[100001], n, x, y, nr;
void Solve( int nod, int lv )
{
    arb[lv]=nod;
    if ( !k[nod] )
        sol[nod]=1;
    else sol[nod] = 1+ sol[arb[lv-k[nod]]];
    for ( vector<int>::iterator it=g[nod].begin(); it<g[nod].end();it++)
            Solve(*it,lv+1);
}
int main()
{
    fin >> n;
    while ( n-- )
        fin>>k[++nr];
    while ( fin>>x>>y )
        g[x].push_back(y),t[y]=x;
    while ( t[x] )
        x = t[x];
    Solve(x,1);
    for ( int i = 1; i <= nr; i++ )
        fout<<sol[i]-1<<' ';
    fin.close();
    fout.close();
    return 0;
}