Pagini recente » Cod sursa (job #1862215) | Cod sursa (job #3181845) | Cod sursa (job #1164138) | Cod sursa (job #2841349) | Cod sursa (job #2781898)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n,a,b,root;
const int dim=1e5+10;
vector<vector<int>> adj;
vector<int> ans,lvl,val;
bitset<dim> outer;
void dfs(int u, int nivel)
{
lvl[nivel]=u;
if(val[u])
ans[u]=ans[lvl[nivel-val[u]]]+1;
for(int v:adj[u])
dfs(v,nivel+1);
}
int main() {
in>>n;
adj.resize(n+1);
val.resize(n+1);
ans.resize(n+1);
lvl.resize(n+1);
for(int i=1;i<=n;i++)
in>>val[i];
for(int i=1;i<=n-1;i++)
{
in>>a>>b;
outer[b]=true;
adj[a].push_back(b);
}
for(int i=1;i<=n;i++)
{
if(outer[i]==false)
{
root=i;
break;
}
}
dfs(root,1);
for(int i=1;i<=n;i++)
out<<ans[i]<<" ";
return 0;
}