Pagini recente » Cod sursa (job #1448638) | Cod sursa (job #1916945) | Cod sursa (job #2562123) | Cod sursa (job #2028257) | Cod sursa (job #2674877)
#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
int stramos[maxn], stramosi[maxn], maimute, x, y, nr;
bool tata[maxn];
vector <int> fii[maxn], lant;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
void rezolva(int maimuta) {
lant.push_back(maimuta);
nr++;
if (stramos[maimuta])
stramosi[maimuta] = stramosi[lant[nr - stramos[maimuta] - 1]] + 1;
for (auto fiu : fii[maimuta])
rezolva(fiu);
lant.pop_back();
nr--;
}
int main() {
fin >> maimute;
for (int i = 1; i <= maimute; i++)
fin >> stramos[i];
for (int j = 1; j < maimute; j++) {
fin >> x >> y;
tata[y] = 1;
fii[x].push_back(y);
}
for (int i = 1; i <= maimute; i++)
if (tata[i] == 0) {
rezolva(i);
break;
}
for (int i = 1; i <= maimute; i++)
fout << stramosi[i] << " ";
}