Cod sursa(job #1883088)

Utilizator roxanastRoxana Stiuca roxanast Data 17 februarie 2017 18:28:29
Problema Cerere Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.8 kb
#include <fstream>
#include <vector>
#define NMAX 1001000
using namespace std;

vector <int> fii[NMAX];
int n,i,k[NMAX],G[NMAX],A,B,radacina;
bool aretata[NMAX];
int stiva[NMAX],cnt=0;
ifstream f("cerere.in");
ofstream g("cerere.out");

void dfs(int x){
    stiva[++cnt]=x;
    if(k[x]==0)
        G[x]=0;
    else
        G[x]=G[stiva[cnt-k[x]]]+1;
    for(vector <int> ::iterator it=fii[x].begin();it<fii[x].end();++it)
        dfs(*it);
    cnt--;
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
        f>>k[i];

    for(i=1;i<n;i++){
        f>>A>>B;
        fii[A].push_back(B);
        aretata[B]='1';
    }
    for(i=1;i<=n&&radacina==0;i++)
        if(aretata[i]!='1')
        radacina=i;

    dfs(radacina);
    for(i=1;i<=n;i++)
        g<<G[i]<<" ";

    return 0;
}