Pagini recente » Cod sursa (job #345398) | Cod sursa (job #2191527) | Cod sursa (job #1895312) | Cod sursa (job #1281116) | Cod sursa (job #1077209)
#include<fstream>
#include<vector>
#include<iostream>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector<int> v[100005];
int n, m, k[100005], i, j, a, b, t[100005], c[100005], f[100005];
void bfs(int x)
{
int p, u;
c[1] = x;
p=1;
u=1;
while(p<=u)
{
for(int i = 0; i< v[c[p]].size(); i++ )
{
c[++u] = v [c[p]] [i];
if(k[c[u]] == 0)
t[c[u]] = 0;
else
{
int a = c[u];
for(int j = 1; j <= k[c[u]]; j++)
a = f[a];
t[c[u]] = t[a] +1;
}
}
p++;
}
}
int main()
{
int s;
fin>>n;
s = n*(n+1)/2;
for( i = 1; i <= n; i++)
fin>>k[i];
for( i = 1; i <= n-1; i++)
{
fin>>a>>b;
v[a].push_back(b);
s -= b;
f[b] = a;
}
bfs(s);
for( i=1; i<= n; i++)
fout<<t[i]<<" ";
return 0;
}