Pagini recente » Cod sursa (job #1712515) | Cod sursa (job #1580773) | Cod sursa (job #851994) | Cod sursa (job #686859) | Cod sursa (job #217108)
Cod sursa(job #217108)
#include <fstream>
#include <vector>
#define NMAX 100001
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int N,kth[NMAX], num[NMAX], stack[NMAX], K = -1, root;
vector<int> A[NMAX];
void read_data()
{
f>>N;
for(int i = 1; i <= N; ++i)
f>>kth[i];
int notr[NMAX];
for(int i = 0, u, v; i < N - 1; ++i)
{
f>>u>>v;
notr[v] = 1;
A[u].push_back(v);
}
for(int i = 1; i <= N; ++i)
{
if(!notr[i]) { root = i; break; }
}
}
void dfs(int node)
{
stack[++K] = node;
if( kth[node] )
num[node] = num[ stack[K - kth[node]] ] + 1;
for(int i = 0; i < A[node].size(); ++i)
dfs(A[node][i]);
--K;
}
void write_sol()
{
for(int i = 1; i <= N; ++i)
g<<num[i]<<' ';
}
int main()
{
read_data();
dfs(root);
write_sol();
}