Pagini recente » Cod sursa (job #736132) | Cod sursa (job #550666) | Cod sursa (job #1274903) | Cod sursa (job #653972) | Cod sursa (job #3164256)
#include <fstream>
#include <vector>
#include <bitset>
std::ifstream fin("cerere.in");
std::ofstream fout("cerere.out");
const int N = 1e5;
std::bitset<N> not_root, used;
std::vector<std::vector<int>> graf;
std::vector<int> stiva;
int n, stramos[N], ans[N];
void dfs(int nod, int h) {
used[nod] = 1;
stiva.emplace_back(nod);
ans[nod] = 1 + ans[stiva[h - stramos[nod]]];
for(int next : graf[nod])
if(!used[next])
dfs(next, h + 1);
stiva.resize(stiva.size() - 1);
}
int main() {
fin >> n;
graf.assign(n, std::vector<int>());
for(int i = 0; i < n; ++i) {
fin >> stramos[i];
ans[i] = -1;
}
for(int i = 0; i < n; ++i) {
int x, y;
fin >> x >> y;
x--, y--;
not_root[y] = 1;
graf[x].emplace_back(y);
graf[y].emplace_back(x);
}
for(int i = 0; i < n; ++i)
if(!not_root[i]) {
dfs(i, 0);
break;
}
for(int i = 0; i < n; ++i)
fout<<ans[i]<<' ';
graf.clear();
stiva.clear();
fin.close();
fout.close();
return 0;
}