Cod sursa(job #1452238)

Utilizator ade_tomiEnache Adelina ade_tomi Data 20 iunie 2015 13:51:49
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
#include<vector>
using namespace std;
int a[100005],str[100005],f[100005],st[100005],nr,n,i,rad,x,y,ans[100005];
vector<int> v[100005];
void dfs(int k)
{

    f[k]=1;
    for(int j=0;j<v[k].size();j++)
    {
        if(f[v[k][j]]==0)
        {
            nr++;
            st[nr]=v[k][j];
            str[v[k][j]]=st[nr-a[v[k][j]]];
            if(a[v[k][j]]!=0)
            ans[v[k][j]]+=ans[st[nr-a[v[k][j]]]]+1;
            dfs(v[k][j]);
            nr--;

        }
    }
}
int main()
{

    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
        if(a[i]==0)
        {
            rad=i;
        }
    }
    rad=n*(n+1)/2;
    for(i=1;i<n;i++)
    {

        scanf("%d %d",&x,&y);
        v[x].push_back(y);
        rad-=y;

    }
    nr=1;
    st[nr]=rad;
    str[rad]=rad;
    dfs(rad);
    for(i=1;i<=n;i++)
        f[i]=0;
    for(i=1;i<=n;i++)
    {

        printf("%d ",ans[i]);
    }
    return 0;


}