Cod sursa(job #1393105)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 19 martie 2015 08:56:43
Problema Cerere Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.08 kb
#include <cstdio>
#include <vector>
using namespace std;
int dest[100001],stiva[100001],v[100001];
vector<int> adj[100001];
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;
    int sumt,sum=0;
    if(n%2==0)
    {
              sumt=n/2;
              sumt*=(n+1);
    }
    else
    {
        sumt=(n+1)/2;
        sumt*=n;
    }
    for(int i=1;i<n;i++)
    {
            scanf("%d%d",&p1,&p2);
            adj[p1].push_back(p2);
            sum+=p2;
    }
    v[sumt-sum]=0;
    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);
    }
}