Cod sursa(job #1347033)

Utilizator avaspAva Spataru avasp Data 18 februarie 2015 19:14:13
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<cstdio>
#include<vector>
using namespace std;
vector<int>v[100001];
bool vc[100001];
int a,b,n;
int vec[100001],rez[100001],st[100001];


void dfs(int nod,int k){
    st[k]=nod;
    if(vec[nod]==0){
        rez[nod]=0;
        for(int i=0;i<v[nod].size();i++){
            dfs(v[nod][i],k+1);
        }
    }
    else{
        rez[nod]=rez[st[k-vec[nod]]]+1;
        for(int i=0;i<v[nod].size();i++){
            dfs(v[nod][i],k+1);
        }
    }

}


int main(){
  freopen("cerere.in","r",stdin);
  freopen("cerere.out","w",stdout);
  scanf("%d",&n);
  for(int i=1;i<=n;i++)
    scanf("%d",&vec[i]);
  for(int i=1;i<=n-1;i++){
    scanf("%d%d",&a,&b);
    v[a].push_back(b);
    vc[b]=true;
  }
  for(int i=1;i<=n;i++)
    if(vc[i]==false)
        dfs(i,1);

  for(int i=1;i<=n;i++)
    printf("%d ",rez[i]);
  return 0;
}