Pagini recente » Cod sursa (job #1018678) | Cod sursa (job #1569876) | Cod sursa (job #473433) | Cod sursa (job #2271214) | Cod sursa (job #1256294)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream is ("cerere.in");
ofstream os ("cerere.out");
int N, v[100004], S[100004], D[100004], K = 1;
vector <int> G[100004];
bitset <100004> B;
void DFS(int t);
int main()
{
is >> N;
for (int i = 1; i <= N; ++i)
is >> v[i];
for (int i = 1, a, b; i < N; ++i)
{
is >> a >> b;
G[a].push_back(b);
}
DFS(1);
for (int i = 1; i <= N; ++i)
os << D[i] << ' ';
is.close();
os.close();
}
void DFS(int t)
{
S[++K] = 0;
B[t] = 1;
for (const auto& f : G[t])
if (B[f] == 0)
{
if (v[f] != 0)
S[K] = S[K-v[f]]+1;
D[f] = S[K];
DFS(f);
}
S[--K] = 0;
};