Cod sursa(job #1393107)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 19 martie 2015 09:00:46
Problema Cerere Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.87 kb
#include <cstdio>
#include <vector>
using namespace std;
int dest[100001],stiva[150001],v[100001];
vector<int> adj[150001];
int n;
void dfs(int nod,int pos)
{
     stiva[pos]=nod;
     dest[nod]=stiva[pos-v[nod]];
     vector<int>::iterator it;
     for(it=adj[nod].begin();it!=adj[nod].end();++it) dfs(*it,pos+1);
}
int main()
{
    freopen ("cerere.in","r",stdin);
    freopen ("cerere.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&v[i]);
    int p1,p2;
    for(int i=1;i<n;i++)
    {
            scanf("%d%d",&p1,&p2);
            adj[p1].push_back(p2);
    }
    dfs(1,1);
    for(int i=1;i<=n;i++)
    {
            int counter=0,nod=i;
            while(v[nod]!=0)
            {
                            nod=dest[nod];
                            counter++;
            }
            printf("%d ",counter);
    }
}