Cod sursa(job #1336268)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 7 februarie 2015 13:59:42
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <fstream>
#include <vector>
#define nmax 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");

vector <int> v[nmax];
int n,viz[nmax],st[nmax];
int sol[nmax],k[nmax];


void dfs(int x,int niv)
{
    viz[x]=1;
    st[niv]=x;

    if (k[x]==0)
        sol[x]=0;
    else
        sol[x]=sol[st[niv-k[x]]]+1;



    for (vector <int> :: iterator it=v[x].begin();it!=v[x].end();it++) {
            if (viz[*it]==0) {
                    dfs(*it,niv+1);
            }
    }
}


int main()
{
    int i,a,b;
    f>>n;
    for (i=1;i<=n;i++)
        f>>k[i];
    for (i=1;i<=n-1;i++) {
        f>>a>>b;
        v[a].push_back(b);
    }
    dfs(1,1);
    for (i=1;i<=n;i++) g<<sol[i]<<' ';

    return 0;
}