Pagini recente » Cod sursa (job #2907164) | Cod sursa (job #2629250) | Cod sursa (job #1929833) | Cod sursa (job #2798819) | Cod sursa (job #633315)
Cod sursa(job #633315)
#include <fstream>
#include <cstdio>
#include <vector>
#define BUFF 7000000
using namespace std;
int ind,n,k[100100],X,Y,rad,ap[100100],sol[100100];
vector<int> A[100100];
char buffer[BUFF+1];
void DFs(int nod,int niv)
{
ap[niv]=nod;
if(k[nod]==0)
sol[nod]=0;
else
sol[nod] = sol[ap[niv-k[nod]]]+1;
for(vector<int>::iterator it=A[nod].begin();it!=A[nod].end();++it)
DFs(*it,niv+1);
}
inline int take()
{
int nr=0;
while(!(buffer[ind]>='0' && buffer[ind]<='9')) ++ind;
while(buffer[ind]>='0' && buffer[ind]<='9') nr=nr*10+buffer[ind]-'0',++ind;
return nr;
}
int main()
{
freopen("cerere.in","r",stdin);
ofstream g("cerere.out");
fread(buffer,1,BUFF,stdin);
n=take();
for(int i=1;i<=n;++i)
k[i]=take();
rad=(n*(n+1))>>1;
for(int i=1;i<n;++i)
{
X=take();Y=take();
A[X].push_back(Y);
rad-=Y;
}
DFs(rad,1);
for(int i=1;i<=n;++i)
g<<sol[i]<<' ';
g.close();
return 0;
}