Cod sursa(job #2201300)

Utilizator herbertoHerbert Mohanu herberto Data 4 mai 2018 09:51:54
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100001
#define INF 1000000000

vector<int>g[MAXN];
int v[MAXN], lis[MAXN], viz[MAXN], d[MAXN], ans=-INF;
int nr=0;
void dfs(int x){
  int y, i;
  nr++; lis[nr]=x;
  viz[x]=1;
  if(v[x]!=0)
    d[x]=1+d[lis[nr-v[x]]];
  else
    d[x]=0;

//  if(x==10)
//    printf("%d", nr);
  for(i=0; i<g[x].size(); i++){
    y=g[x][i];
    if(viz[y]==0)
      dfs(y);
  }
  nr--;
}

int main(){
  FILE*fin=fopen("cerere.in", "r");
  FILE*fout=fopen("cerere.out", "w");
  int n, i, a, b;
  fscanf(fin, "%d", &n);
  for(i=1; i<=n; i++)
    fscanf(fin, "%d", &v[i]);

  for(i=1; i<=n-1; i++){
    fscanf(fin, "%d%d", &a, &b);
    g[a].push_back(b);
    g[b].push_back(a);
  }
  dfs(1);
  for(i=1; i<=n; i++)
    fprintf(fout, "%d ", d[i]);
  return 0;
}