Pagini recente » Cod sursa (job #322290) | Cod sursa (job #3240593) | Cod sursa (job #2693738) | Cod sursa (job #1701041) | Cod sursa (job #2524555)
#include<fstream>
#define nmax 100009
using namespace std ;
ifstream f ("cerere.in");
ofstream g ("cerere.out");
int stiva[nmax],start[nmax],t[2][nmax],distanta[nmax],afisat[nmax],i,n,m,j,k,varf,element,vecin,coloana;
bool rad[nmax],vizitat[nmax];
int main()
{
f>>n;
for(i=1;i<=n;i++)
f>>distanta[i];
m=n-1;
while(m)
{
m--;
f>>i>>j;
rad[j]=1;
k++;
t[0][k]=j;
t[1][k]=start[i];
start[i]=k;
}
for(i=1;i<=n;i++)
{
if(rad[i]==0)
{
afisat[i]=0;
vizitat[i]=1;
varf=1,stiva[varf]=i;
while(varf)
{
element=stiva[varf];
coloana=start[element];
if(distanta[element]!=0)
{
afisat[element]=afisat[stiva[varf-distanta[element]]]+1;
}
int ok=1;
while(coloana && ok==1)
{
vecin=t[0][coloana];
if(vizitat[vecin]==0)
{
stiva[++varf]=vecin,vizitat[vecin]=1,ok=0;
}
coloana=t[1][coloana];
}
if(ok==1)
varf--;
}
}
}
for(i=1;i<=n;i++)
g<<afisat[i]<<" ";
}