Pagini recente » Cod sursa (job #801424) | Cod sursa (job #782489)
Cod sursa(job #782489)
#include <fstream>
#include <vector>
#define MAX 131072
using namespace std;
int k[MAX], grad[MAX], ancestor[MAX], stack[MAX], n, a, b;
vector<int> v[MAX];
inline int getRoot()
{
for(int i = 1; i <= n; i++)
if(!grad[i]) return i;
}
void dfs(int nod)
{
stack[++stack[0]] = nod;
ancestor[nod] = stack[stack[0] - k[nod]];
for(int i = 0; i < v[nod].size(); i++)
dfs(v[nod][i]);
stack[0]--;
}
int main()
{
ifstream in("cerere.in");
in>>n;
for(int i = 1; i <= n; i++) in>>k[i];
for(int i = 1; i < n; i++)
{
in>>a>>b; grad[b]++;
v[a].push_back(b);
} in.close();
dfs(getRoot());
ofstream out("cerere.out");
for(int i = 1; i <= n; i++)
{
int result = 0, nod = i;
while(ancestor[nod] != nod) nod = ancestor[nod], result++;
out<<result<<" ";
}
out.close();
return 0;
}