Cod sursa(job #1423351)

Utilizator Liviu98Dinca Liviu Liviu98 Data 21 aprilie 2015 19:04:20
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMax 100005
using namespace std;
ifstream g("cerere.in");
ofstream f("cerere.out");
vector <int> V[NMax];
int N,M,x,y,S,varf;
int Stiva[NMax],sol[NMax],K[NMax],I[NMax];

void DFS(int x)
{
    Stiva[++varf]=x;
    if(K[x]==0)
        sol[x]=0;
    else
        sol[x]=1+sol[Stiva[varf-K[x]]];
    for(int i=0;i<V[x].size();i++)
        DFS(V[x][i]);
    --varf;
}

int main()
{
    g>>N;
    for(int i=1;i<=N;i++)
        g>>K[i];
    for(int i=1;i<N;i++)
    {
        g>>x>>y;
        V[x].push_back(y);
        ++I[y];
    }
    for(int i=1;i<=N;i++)
        if(!I[i])
        {
            S=i;
            break;
        }
    DFS(S);
    for(int i=1;i<=N;i++)
        f<<sol[i]<<' ';
}