Cod sursa(job #1760669)

Utilizator KOzarmOvidiu Badea KOzarm Data 21 septembrie 2016 07:46:21
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <vector>


using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");


vector <int> G[100005];
bool viz[100005];
int a[100005],k[100005],arbore[100005],T[100005];
int n;


void dfs(int poz,int kappa)
{
    viz[poz]=1;
    if(k[poz]!=0&&kappa-k[poz]>0)
    {
        a[poz]=arbore[kappa-k[poz]]+1;
        arbore[kappa]=a[poz];
    }
    else
    {
        a[poz]=0;
        arbore[kappa]=0;
    }
    for(int i=0;i<G[poz].size();i++)
    if(viz[G[poz][i]]==0)
        dfs(G[poz][i],kappa+1);
}

int main()
{
    fin>>n;
    int i;
    for(i=1;i<=n;i++)
        fin>>k[i];
    for(i=1;i<n;i++)
    {
        int c,b;
        fin>>c>>b;
        G[c].push_back(b);
        T[b]=c;
    }
    for(i=1;i<=n;i++)
    if(T[i]==0)
    {
        dfs(i,1);
        break;
    }
    for(i=1;i<=n;i++)
        fout<<a[i]<<" ";
    return 0;
}