Pagini recente » Cod sursa (job #844645) | Cod sursa (job #2696091) | Cod sursa (job #473332) | Cod sursa (job #1620057) | Cod sursa (job #1257288)
#include <fstream>
#include <vector>
using namespace std;
const int NMax = 100010;
int N;
int st[NMax], vf, up[NMax], ans[NMax];
vector <int> G[NMax];
int rad = 0;
void Read()
{
ifstream f ("cerere.in");
f >> N;
for (int i = 1; i <= N; ++ i)
{
f >> up[i];
rad = rad ^ i;
}
for (int i = 1; i < N; ++ i)
{
int x, y; f >> x >> y;
G[x].push_back(y);
rad = rad ^ y;
}
f.close();
}
inline void DFS(const int node)
{
st[++vf] = node;
if (up[node] == 0)
ans[node] = 0;
else
ans[node] = ans[st[vf - up[node]]] + 1;
for (vector <int> :: iterator it = G[node].begin(); it != G[node].end(); ++ it)
DFS(*it);
--vf;
}
void Write()
{
ofstream g ("cerere.out");
for (int i = 1; i <= N; ++ i)
g << ans[i] << " ";
g << "\n";
g.close();
}
int main()
{
Read();
DFS(rad);
Write();
return 0;
}