Cod sursa(job #1770115)

Utilizator KronSabau Valeriu Kron Data 3 octombrie 2016 19:28:20
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
using namespace std;

ifstream f("cerere.in");
ofstream g("cerere.out");

int node[100001],a[100001],n,st[100001],top;
vector <int> v[100001];

void dfs(int vertex ,int level )
{
    st[top++]=vertex;

    if(a[vertex])
        node[vertex]=node[st[level-a[vertex]]]+1;
    else node[vertex]=0;

    for(vector<int>::iterator it=v[vertex].begin();it!=v[vertex].end();it++)
        dfs(*it,level+1);

    top--;
}

int main()
{
    f >> n ;
    for(int i=1;i<=n;i++)
        f>> a[i];
    int child,parent;
    for(int i=1;i<n;i++)
    {
        f>> parent >> child;
        v[parent].push_back(child);
    }

    int root=1;

    dfs(root,0);
    for(int i=1;i<=n;i++)
    {
        g << node[i] << " ";
    }
    return 0;
}