Pagini recente » Cod sursa (job #1528799) | Cod sursa (job #2081126) | Cod sursa (job #1939979) | Cod sursa (job #579416) | Cod sursa (job #586857)
Cod sursa(job #586857)
#include <fstream>
#include <vector>
using namespace std;
vector<int>f[100001];
int S[100001],m,n,k[100001],a,b,deg[100001],r,cereri[100001];
bool sol[100001];
void DFS(int x)
{
S[++m]=x;
int i;
if(sol[x]) cereri[x]=0; else
cereri[x]=cereri[S[m-k[x]]]+1;
for(i=0;i<f[x].size();i++)
DFS(f[x][i]);
m--;
}
int main()
{
int i;
ifstream fi("cerere.in");
ofstream fo("cerere.out");
fi>>n;
for(i=1;i<=n;i++) { fi>>k[i]; if(k[i]==0) sol[i]=true; }
for(i=1;i<n;i++)
{
fi>>a>>b;
f[a].push_back(b);
deg[b]++;
}
for(i=1,r=0;i<=n and !r;i++)
if(!deg[i]) r=i;
DFS(r);
for(i=1;i<=n;i++) fo<<cereri[i]<<" ";
fo<<"\n";
return 0;
}