Cod sursa(job #2258262)

Utilizator UnseenMarksmanDavid Catalin UnseenMarksman Data 11 octombrie 2018 09:28:15
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>
#define maxn 100002
using namespace std;

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

int n, t[maxn], v[maxn], res[maxn], nivel[maxn];
vector<int>G[maxn];

void dfs(int nod, int level)
{
    nivel[level]=nod;
    if(v[nod])
    {
        res[nod]=res[nivel[level-v[nod]]]+1;
    }
    for(auto it:G[nod])
        dfs(it,level+1);
}

int root(int nod)
{
    if(t[nod])
    {
        return root(t[nod]);
    }
    return nod;
}

int main()
{
    int vf;
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>v[i];
    }
    for(int i=1, x, y; i<n; i++)
    {
        fin>>x>>y;
        t[y]=x;
        G[x].push_back(y);
    }
    vf=root(1);
    dfs(vf,1);
    for(int i=1; i<=n; i++)
    {
        fout<<res[i]<<' ';
    }
    return 0;
}