Cod sursa(job #1595404)

Utilizator cristinelulCristian Virga cristinelul Data 10 februarie 2016 11:34:10
Problema Cerere Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <vector>
#define nmax 100001

using namespace std;

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

int n,v[nmax],tata[nmax],st[nmax],l=1,rez[nmax];
vector <int> ma[nmax];
void dfs(int x)
{
    int i,cx,nr=0;
    cx=l;
    while(v[st[cx]]!=0)
    {
        cx=cx-v[st[cx]];
        nr++;
    }
    rez[x]=nr;
    l++;
    for(i=0;i<ma[x].size();i++)
    {
        st[l]=ma[x][i];
        dfs(ma[x][i]);
    }
    l--;
}
void citire()
{
    int i,a,b;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=1;i<n;i++)
    {
        fin>>a>>b;
        tata[b]=a;
        ma[a].push_back(b);
    }
    for(i=1;i<=n;i++)
        if(tata[i]==0)
        {
            st[1]=i;
            dfs(i);
            break;
        }
}
void afisare()
{
    int i;
    for(i=1;i<=n;i++)
        fout<<rez[i]<<' ';
}
int main()
{
    citire();
    afisare();
    fout.close();
    return 0;
}