Pagini recente » Cod sursa (job #710077) | Cod sursa (job #2808534) | Cod sursa (job #2905954) | Cod sursa (job #2818016) | Cod sursa (job #2833662)
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <unordered_map>
#include <cstring>
#include <climits>
#define NMAX 100003
using namespace std;
int n;
int kMisc[NMAX + 3];
int tata[NMAX + 3];
int dist[NMAX + 3];
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int cTata(int val)
{
int k = val;
int d = dist[val];
while (d > 0 && tata[k] > 0)
{
d--;
k = tata[k];
}
return k;
}
int ajung(int val)
{
int k = val;
int rez = 0;
while (dist[k] > 0)
{
k = kMisc[k];
rez++;
}
return rez;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> dist[i];
}
for (int i = 1; i < n; i++)
{
int x, y;
fin >> x >> y;
tata[y] = x;
}
for (int i = 1; i <= n; i++)
{
kMisc[i] = cTata(i);
}
for (int i = 1; i <= n; i++)
{
fout << ajung(i)<<" ";
}
return 0;
}