Pagini recente » Cod sursa (job #827976) | Cod sursa (job #1649414) | Cod sursa (job #2888544) | Cod sursa (job #15202) | Cod sursa (job #862693)
Cod sursa(job #862693)
#include <fstream>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n,m,x,y;
int intreaba[100001],sol[100001],t[100001];
bool calculat[100001];
void calculeaza(int maimuta)
{
if(intreaba[maimuta]==0)
sol[maimuta] = 0;
else
{
int tata = maimuta;
for(int i=1;i<=intreaba[maimuta];i++)
tata = t[tata];
if(!calculat[tata])
calculeaza(tata);
sol[maimuta] = 1 + sol[tata];
}
calculat[maimuta] = true;
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>intreaba[i];
}
for(int i=1;i<n;i++)
{
fin>>x>>y;
t[y] = x;
}
for(int i=1;i<=n;i++)
{
if(!calculat[i])
calculeaza(i);
fout<<sol[i]<<' ';
}
fin.close();
fout.close();
return 0;
}