Pagini recente » Cod sursa (job #3167367) | Cod sursa (job #2945612) | Cod sursa (job #1114588) | Cod sursa (job #2891298) | Cod sursa (job #1069489)
#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 value){
Stack[value] = node;
if(K[node])
solve[node] = solve[ Stack[value - K[node]]] + 1;
for(int i = 0; i < V[node].size(); i++){
DF(V[node][i], value + 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]++;
}
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++){//arunc o cerere maimutei i
out << solve[i] <<' ';
}
return 0;
}
/* 1
2 6
3 4 7 8
5 9 10
*/