Pagini recente » Cod sursa (job #255775) | Cod sursa (job #1489172) | Cod sursa (job #2030824) | Cod sursa (job #1901567) | Cod sursa (job #1033285)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
const int MAXN = 100005;
int n, boss[MAXN], pas[MAXN], visited[MAXN], coada[MAXN], i, a, b, vf = -1;
vector<int> graph[MAXN];
void Parcurge(int nod)
{
visited[nod] = 1;
coada[++vf] = nod;
if (boss[nod] == 0) pas[nod] = 0;
else pas[nod] = pas[coada[vf - boss[nod]]] + 1;
vector<int>::iterator it;
for (it = graph[nod].begin(); it != graph[nod].end(); ++it)
if (!visited[*it])
Parcurge(*it);
--vf;
}
int main() {
f >> n;
for (i = 1; i <= n; i++)
f >> boss[i];
for (i = 1; i <= n-1; i++)
{
f >> a >> b;
graph[a].push_back(b);
graph[b].push_back(a);
}
Parcurge(1);
for (i = 1; i <= n; i++)
g << pas[i] << ' ';
return 0;
}