Pagini recente » Cod sursa (job #2148594) | Cod sursa (job #102377) | Monitorul de evaluare | Cod sursa (job #950085) | Cod sursa (job #3338196)
#include <fstream>
#include <climits>
#include <algorithm>
#include <vector>
#include <cstring>
#define DIM 100001
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
// declaring
vector <int> l[DIM];
int k[DIM],n,sol[DIM],s[DIM],r,t[DIM],x,y;
/// dfs function
void dfs(int nod, int niv)
{
s[niv]=nod;
if (k[nod]==0){
sol[nod]=0;
}
else{
sol[nod]=1+sol[s[niv-k[nod]]];
}
for (int i=0;i<l[nod].size();i++){
dfs(l[nod][i],niv+1);
}
}
int main()
{
////reading
cin >> n;
for (int i=1;i<=n;i++){
cin >> k[i];
}
for (int i=1;i<n;i++){
cin >> x>> y;
l[x].push_back(y);
t[y]=x;
}
///finding the root
for (int i=1;i<=n;i++){
if (t[i]==0){
r=i;
}
}
////algorithm
dfs(r,1);
////outputting
for (int i=1;i<=n;i++){
cout << sol[i] << " ";
}
// test
/*for (int i=1;i<=n;i++){
cout << k[i] << " ";
}
cout << endl;
for (int i=1;i<=n;i++){
for (int j=0;j<l[i].size();j++){
cout << l[i][j]<<" ";
}
cout << endl;
}
for (int i=1;i<=n;i++){
cout << t[i]<< " ";
}*/
}