Pagini recente » Cod sursa (job #980088) | Cod sursa (job #3174282) | Cod sursa (job #1613912) | Cod sursa (job #589010) | Cod sursa (job #1069492)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int NMAX = 100001;
vector<int> V[NMAX];
int K[NMAX], Stack[NMAX], solve[NMAX];
void DF(int node, int level){
Stack[level] = node;
if(K[node])
solve[node] = solve[ Stack[level - K[node]]] + 1;
for(int i = 0; i < V[node].size(); i++){
DF(V[node][i], level + 1);
}
}
int main()
{
int N, i, x, y, treeRoot;
in >> N;
for(i = 1; i <= N; i++){
in >> K[i];
if(K[i])
solve[i] = 1;
}
for(i = 1, treeRoot = N; i < N; i++){
in >> x >> y;
V[x].push_back(y);
treeRoot ^= y ^ i;
}
DF(treeRoot,0);
for(i = 1; i <= N; i++){
out << solve[i] <<' ';
}
return 0;
}