Pagini recente » Cod sursa (job #2665865) | Cod sursa (job #1276589) | Cod sursa (job #1706531) | Cod sursa (job #202352) | Cod sursa (job #3341374)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n,K[100005],ans[100005];
bool are_fii[100005];
vector<int> tata[100005];
void citire(){
fin>>n;
for(int i=1;i<=n;i++){
fin>>K[i];
}
int i,j;
while(fin>>i>>j){
tata[i].push_back(j);
are_fii[i]=1;
}
}
int stiva[100005],top=0;
//ans[i]=1+ans[top-K[i]]
void dfs(int start){
if(K[start]==0){
ans[start]=0;
}
if(!are_fii[start]) return;
for(int i=0;i<tata[start].size();i++){
int nod_curent=tata[start][i];
stiva[++top]=nod_curent;
ans[nod_curent]=1+ans[stiva[top-K[nod_curent]]];
dfs(nod_curent);
top--;
}
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
//memset(ans, -1, sizeof(ans));
citire();
stiva[++top]=1;
dfs(1);
for(int i=1;i<=n;i++){
fout<<ans[i]<<" ";
}
return 0;
}