Pagini recente » Cod sursa (job #1888904) | Cod sursa (job #2361011) | Cod sursa (job #564272) | Cod sursa (job #2427671) | Cod sursa (job #2094085)
#include <fstream>
#include <vector>
#define VAL 100005
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int N, K[VAL], i, j;
int A, B, ans[VAL];
int st[VAL], top, stram;
bool fat[VAL];
vector <int> G[VAL];
void DFS(int nod)
{
vector <int> :: iterator it;
st[++top]=nod;
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
stram=st[top-K[*it]+1];
if (K[*it]>0)
ans[*it]=ans[stram]+1;
DFS(*it);
}
top--;
}
int main()
{
fin >> N;
for (i=1; i<=N; i++)
fin >> K[i];
for (i=1; i<N; i++)
{
fin >> A >> B;
fat[B]=true;
G[A].push_back(B);
}
for (i=1; i<=N; i++)
if (fat[i]==false)
break;
DFS(i);
for (i=1; i<=N; i++)
fout << ans[i] << " ";
fin.close();
fout.close();
return 0;
}