Cod sursa(job #2201302)

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

vector<int>g[MAXN];
int v[MAXN], lis[MAXN], d[MAXN], ans=-INF;
int rad[MAXN];
int nr=0;
void dfs(int x){
  int y, i;
  nr++; lis[nr]=x;
  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];
    dfs(y);
  }
  nr--;
}

int main(){
  FILE*fin=fopen("cerere.in", "r");
  FILE*fout=fopen("cerere.out", "w");
  int n, i, a, b, ok;
  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);
    rad[b]=1;
  }
  ok=0;
  for(i=1; i<=n; i++)
    if(rad[i]==0)
      ok=i;
  printf("%d", ok);
  dfs(ok);
  for(i=1; i<=n; i++)
    fprintf(fout, "%d ", d[i]);
  return 0;
}