Pagini recente » Cod sursa (job #2303148) | Cod sursa (job #1679670) | Cod sursa (job #1344657) | Cod sursa (job #1342332) | Cod sursa (job #953571)
Cod sursa(job #953571)
/* Rusu Cosmin Ionut */
/* Time complexity : O(n) */
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("cerere.in");
ofstream cout("cerere.out");
const int N_MAX = 100005;
vector <int> Graph[N_MAX], stack(N_MAX), k(N_MAX), g(N_MAX);
bool has_dad[N_MAX];
int n, top;
void dfs(int nod)
{
stack[++top] = nod;
if( k[nod] )
g[nod] = g[stack[top - k[nod]]] + 1;
for(vector<int> :: iterator it = Graph[nod].begin() ; it != Graph[nod].end(); ++it)
dfs(*it);
--top;
}
int main()
{
cin >> n;
for(int i = 1 ; i <= n ;++ i)
cin >> k[i];
for(int i = 1 ; i < n ;++ i)
{
int a, b;
cin >> a >> b;
has_dad[b] = true;
Graph[a].push_back(b);
}
int i;
for(i = 1; i <= n ;++ i)
if(!has_dad[i])
break;
dfs(i);
for(int i = 1 ; i <= n ;++ i)
cout << g[i] <<" ";
return 0;
}