Pagini recente » Cod sursa (job #1871838) | Cod sursa (job #1455899) | Cod sursa (job #883731) | Cod sursa (job #1920429) | Cod sursa (job #1653629)
#include <fstream>
#include <vector>
#define NMAX 100001
using namespace std;
int sol[NMAX], k[NMAX];
vector<int> stack;
vector<int> G[NMAX];
void dfs()
{
int node = stack.back();
if (k[node] == 0)
{
sol[node] = 0;
}
else
{
sol[node] = sol[stack[stack.size() - k[node] - 1]] + 1;
}
for (vector<int>::iterator it = G[node].begin(); it != G[node].end(); it++)
{
stack.push_back(*it);
dfs();
stack.pop_back();
}
}
int main()
{
int n, i, x, y, root;
vector<int> grad;
ifstream f("cerere.in");
f >> n;
grad.resize(n + 1, 0);
for (i = 1; i <= n; i++)
{
f >> k[i];
}
for (i = 1; i <= n - 1; i++)
{
f >> x >> y;
G[x].push_back(y);
grad[y]++;
}
f.close();
for (i = 1; i <= n; i++)
{
if (grad[i] == 0)
{
root = i;
break;
}
}
stack.push_back(root);
dfs();
ofstream g("cerere.out");
for (i = 1; i <= n; i++)
{
g << sol[i] << " ";
}
g.close();
return 0;
}