Pagini recente » Cod sursa (job #1642602) | Cod sursa (job #732917) | Cod sursa (job #1742824) | Cod sursa (job #1555101) | Cod sursa (job #369088)
Cod sursa(job #369088)
#include <fstream>
#include <vector>
using namespace std;
#define MAX_N 100005
#define foreach(V) for(typeof (V).begin() it = (V).begin(); it != (V).end(); ++it)
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
int N, R, K[MAX_N], Sol[MAX_N], St[MAX_N], T[MAX_N];
vector <int> G[MAX_N];
void citire()
{
fin >> N;
for(int i = 1; i <= N; ++i)
fin >> K[i];
for(int i = 1; i < N; ++i)
{
int x, y;
fin >> x >> y;
G[x].push_back(y);
T[y] = x;
}
for(int i = 1; i <= N; ++i)
if(!T[i])
R = i;
}
void dfs(int nod)
{
St[++St[0]] = nod;
if(K[nod])
Sol[nod] = Sol[St[St[0] - K[nod]]] + 1;
foreach(G[nod])
dfs(*it);
--St[0];
}
int main()
{
citire();
dfs(R);
for(int i = 1; i <= N; ++i)
fout << Sol[i] << " ";
}