Pagini recente » Cod sursa (job #3360016) | Cod sursa (job #3360018) | Cod sursa (job #3360039)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
struct node
{
vector<int> sons;
int x, val;
bool isRoot = true;
};
int n;
node tree[100005];
int root;
vector<int> st;
void read()
{
fin >> n;
for(int i = 1; i <= n; ++i){
int a;
fin >> a;
tree[i].x = a;
if(a == 0){
tree[i].val = 0;
}
}
for(int i = 1; i < n; ++i){
int A,B;
fin >> A >> B;
tree[A].sons.push_back(B);
tree[B].isRoot = false;
}
for(int i = 1; i <= n; ++i){
if(tree[i].isRoot){
root = i;
break;
}
}
}
void dfs(int node)
{
st.push_back(node);
tree[node].val = tree[st[st.size() - 1 - tree[node].x]].val + 1;
for(int i = 0; i < tree[node].sons.size(); ++i){
dfs(tree[node].sons[i]);
}
st.pop_back();
}
int main()
{
read();
dfs(root);
for(int i = 1; i <= n; ++i){
fout << tree[i].val - 1 << ' ';
}
return 0;
}