Pagini recente » Cod sursa (job #37478) | Cod sursa (job #1139356) | Cod sursa (job #25142) | Cod sursa (job #1958057) | Cod sursa (job #2572965)
#include <iostream>
#include <fstream>
#include <vector>
#define VVI vector <vector <int> >
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int MaxN = 100001;
VVI G;
int n, k[MaxN], tt[MaxN], rez[MaxN];
bool fii[MaxN];
void Citire();
int CautaRadacina();
void Dfs(int nod);
vector<int> v;
int main()
{
Citire();
int r = CautaRadacina();
Dfs(r);
for (int i = 1; i <= n; ++i)
fout << rez[i] << ' ';
}
void Dfs(int nod)
{
v.push_back(nod);
for (int i = 0; i < G[nod].size(); ++i)
{
int vecin = G[nod][i];
if (k[vecin] != 0)
rez[vecin] = rez[v[v.size() - k[vecin]]] + 1;
Dfs(vecin);
v.pop_back();
}
}
int CautaRadacina()
{
for (int i = 1; i <= n; ++i)
{
if (!fii[i])
return i;
}
}
void Citire()
{
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> k[i];
G = VVI(n + 1);
for (int i = 1; i < n; ++i)
{
int x, y;
fin >> x >> y;
G[x].push_back(y);
fii[y] = true;
}
}