Cod sursa(job #993585)

Utilizator enedumitruene dumitru enedumitru Data 4 septembrie 2013 08:28:53
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("cerere.in"); ofstream g("cerere.out");
const int N=100002;
int n,vf,sol[N],s[N],T[N],k[N];
vector <int> v[N];
void dfs(int x)
{   s[++vf]=x;
    if(k[x]) sol[x]=sol[s[vf-k[x]]]+1;
	vector <int> :: iterator it=v[x].begin(), sf=v[x].end();
    for(;it!=sf;++it) dfs(*it);
    --vf;
}
int main ()
{   f>>n;
	int i,A,B;
    for(i=1;i<=n;++i) f>>k[i];
    for(i=1;i<n;++i)
    {   f>>A>>B;
        v[A].push_back(B);
        T[B]=1;
    }
    for(i=1;i<=n;++i)
        if(!T[i]) dfs(i), i=n;
    for(i=1;i<=n;++i) g<<sol[i]<<" ";
    g.close(); return 0;
}