Cod sursa(job #1770120)

Utilizator KronSabau Valeriu Kron Data 3 octombrie 2016 19:35:11
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 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,part[100001];
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);
        part[child]=parent;

    }

    int root=1;
    while(part[root]!=0)
    {
        root=part[root];
    }

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