Pagini recente » Cod sursa (job #333928) | Cod sursa (job #2334684) | Cod sursa (job #1434183) | Cod sursa (job #103088) | Cod sursa (job #830735)
Cod sursa(job #830735)
#include<fstream>
#include<vector>
#define DIM 100010
using namespace std;
int n , i , K[DIM],a,b,Gr[DIM];
ifstream f("cerere.in");
ofstream g("cerere.out");
vector<int>L[DIM];
int stack[DIM];
int k;
int Str[DIM],Sol[DIM];
void dfs(int x){
stack[++k]=x;
Str[x]=stack[k-K[x]];
for(unsigned int i=0;i<L[x].size();i++){
dfs(L[x][i]);
k--;
}
}
int find_sol(int nod){
int k=0;
while(Str[nod]!=nod){
nod=Str[nod];
k++;
}
return k;
}
int main(){
f>>n;
for(i=1;i<=n;i++)
f>>K[i];
for(i=1;i<n;i++){
f>>a>>b;
Gr[b]=1;
L[a].push_back(b);
}
for(i=1;i<=n;i++)
if(Gr[i]==0){
dfs(i);
break;
}
for(i=1;i<=n;i++){
Sol[i]=find_sol(i);
g<<Sol[i]<<" ";
}
return 0;
}