Mai intai trebuie sa te autentifici.
Cod sursa(job #2673376)
Utilizator | Data | 16 noiembrie 2020 17:28:21 | |
---|---|---|---|
Problema | Cerere | Scor | 40 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.87 kb |
#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
int maimuta[maxn], stramos[maxn], nr[maxn], maimute, x, y;
vector <int> fii[maxn];
ifstream fin("cerere.in");
ofstream fout("cerere.out");
void rezolva(int nod) {
int cauta = nod;
while (maimuta[nod]--)
cauta = stramos[cauta];
nr[nod] = nr[cauta] + 1;
if (cauta == nod)
nr[cauta]--;
for (auto fiu : fii[nod])
rezolva(fiu);
}
int main() {
fin >> maimute;
for (int i = 1; i <= maimute; i++)
fin >> maimuta[i];
for (int j = 1; j < maimute; j++) {
fin >> x >> y;
stramos[y] = x;
fii[x].push_back(y);
}
for (int i = 1; i <= maimute; i++)
if (stramos[i] == 0) {
rezolva(i);
break;
}
for (int i = 1; i <= maimute; i++)
fout << nr[i] << " ";
}