Pagini recente » Clasament leulloe3 | Cod sursa (job #2743984) | Cod sursa (job #1213546) | Cod sursa (job #1142046) | Cod sursa (job #1291079)
#include <fstream>
#include <vector>
#define MAXN 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n, dep[MAXN], tata[MAXN], rad, sol[MAXN], x, y;
vector<int> G[MAXN], stramosi;
void DFS(int p);
int main()
{
int i;
f >> n;
for(i = 1; i <= n; i++)
f >> dep[i];
for(i = 1; i < n; i++){
f >> x >> y;
tata[y] = x;
G[x].push_back(y);
}
for(i = 1; i <= n; i++)
if(!tata[i]){
rad = i;
break;
}
DFS(rad);
for(i = 1; i <= n; i++)
g << sol[i] << ' ';
f.close();
g.close();
return 0;
}
void DFS(int p){
int i;
if(dep[p] == 0)
sol[p] = 0;
else
sol[p] = sol[stramosi[stramosi.size() - dep[p]]] + 1;
stramosi.push_back(p);
for(i = 0; i < G[p].size(); i++)
DFS(G[p][i]);
stramosi.pop_back();
}