Pagini recente » Cod sursa (job #1058338) | Cod sursa (job #2604809)
#include <bits/stdc++.h>
//std::ifstream fin ("input.txt");
//std::ofstream fout ("output.txt");
std::ifstream fin ("cerere.in");
std::ofstream fout ("cerere.out");
bool ok[100005];
int x[100005], dp[100005];
std::vector < int > edge[100005];
std::vector < int > path;
void DFS (int node){
if (x[node] == 0)
dp[node] = 0;
else
dp[node] = dp[path[path.size()-x[node]]] + 1;
path.push_back (node);
for (int i=0; i<edge[node].size(); i++){
int next = edge[node][i];
DFS (next);
}
path.pop_back ();
}
int main()
{
int V, i, src, dest;
fin >> V;
for (i=1; i<=V; i++)
fin >> x[i];
for (i=1; i<V; i++){
fin >> src >> dest;
edge[src].push_back (dest);
ok[dest] = 1;
}
int root = -1;
for (i=1; i<=V; i++)
if (ok[i] == 0){
root = i;
break;
}
DFS (root);
for (i=1; i<=V; i++)
fout << dp[i] << ' ';
return 0;
}