Cod sursa(job #393496)

Utilizator freak93Adrian Budau freak93 Data 9 februarie 2010 15:39:15
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#include<vector>

using namespace std;

const char iname[]="cerere.in";
const char oname[]="cerere.out";
const int maxn=100005;

ifstream f(iname);
ofstream g(oname);

int a[maxn],i,n,x,y,k[maxn],notr[maxn],ans[maxn],s[maxn],p;

vector<int> E[maxn];

void go(int x)
{
    s[++p]=x;
    if(k[x]!=0)
        ans[x]=ans[s[p-k[x]]]+1;
    for(vector<int>::iterator it=E[x].begin();it!=E[x].end();++it)
        go(*it);
    s[p--]=0;
}

int main()
{
    f>>n;
    for(i=1;i<=n;++i)
        f>>k[i];
    for(i=1;i<n;++i)
        f>>x>>y,E[x].push_back(y),notr[y]=1;

    for(i=1;i<=n;++i)
        if(notr[i]==0)
            go(i);

    for(i=1;i<=n;++i)
        g<<ans[i]<<" ";
    g<<"\n";

    f.close();
    g.close();

    return 0;
}