Pagini recente » Cod sursa (job #309851) | Cod sursa (job #2067513) | Cod sursa (job #2067500) | Cod sursa (job #3328242) | Cod sursa (job #3327994)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
//dp[vecin]=stramos[niv-V[nod]]
void dfs(int nod,int niv,const vector<vector<int>>&graf,const vector<int>&V,vector<bool>&vizitat,vector<int>&dp,vector<int>&stramos){
vizitat[nod]=true;
stramos[niv]=nod;
if(V[nod]==0){
dp[nod]=0;
}else{
if(niv-V[nod]<0){
dp[nod]=0;
}else{
dp[nod]=dp[stramos[niv-V[nod]]]+1;
}
}
for(int vecin:graf[nod]){
if(!vizitat[vecin]){
dfs(vecin,niv+1,graf,V,vizitat,dp,stramos);
}
}
}
/* stramos noduri
1 nod 2
2 nod 6
3 nod 9
4 nod 10
5 nod 11 duce e legat de 2
dp[vecin]=stramos[niv-V[nod]];
nr de pasi=sol
sol[i]=dp[stramos[niv-V[i]]]+1;
*/
int main(){
ios_base::sync_with_stdio(false);
in.tie(NULL);
out.tie(NULL);
int n;
in>>n;
vector<int>V(n+1);
vector<vector<int>>graf(n+1);
vector<bool>vizitat(n+1,false);
vector<int>dp(n+1,0);
vector<int>stramos(n+1);
vector<int>sol(n+1);
int x,y;
for(int i=1;i<=n;i++){
in>>V[i];
}
for(int i=1;i<n;i++){
in>>x>>y;
graf[x].push_back(y);
graf[y].push_back(x);
}
dfs(1,1,graf,V,vizitat,dp,stramos);
for(int i=1;i<=n;i++){
out<<dp[i]<<" ";
}
}