Pagini recente » Cod sursa (job #3214227) | Cod sursa (job #710193) | Borderou de evaluare (job #591569) | Cod sursa (job #1148194) | Cod sursa (job #710576)
Cod sursa(job #710576)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int stack[100000], stack_size, back[100000], res[100000];
vector <int> tree[100000];
int pop()
{
--stack_size;
return stack[stack_size+1];
}
void push(int n)
{
++stack_size;
stack[stack_size] = n;
}
void dfs(int node)
{
if(back[node])
res[node] = res[stack[stack_size-back[node]]] + 1;
for(int i = 0; i < tree[node].size(); ++i)
{
push(tree[node][i]);
dfs(tree[node][i]);
pop();
}
}
int main()
{
int N;
ifstream in("cerere.in");
in >> N;
for(int i = 0; i < N; ++i)
{
in >> back[i];
}
for(int i = 0, a, b; i < N-1; ++i)
{
in >> a >> b;
tree[a-1].push_back(b-1);
stack[b-1] = 1;
}
int root;
for(int i = 0; i < N-1; ++i)
if(!stack[i])
{
root = i;
break;
}
push(root);
dfs(0);
ofstream out("cerere.out");
for(int i = 0; i < N; ++i)
out << res[i] << " ";
out.close();
return 0;
}