Cod sursa(job #3224844)

Utilizator Radu_VasileRadu Vasile Radu_Vasile Data 16 aprilie 2024 12:45:33
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>
#define MAXN 100000
using namespace std;
vector <int> v[MAXN + 1];
int val[MAXN + 1];
int s[MAXN + 1];
int k[MAXN + 1];
int r[MAXN + 1];
void dfs(int node, int nivel){
  s[nivel] = node;
  if(k[node] == 0)
    r[node] = 0;
  else
    r[node] = r[s[nivel - k[node]]] + 1;
  for( auto &i : v[node] ){
    dfs(i, nivel + 1);
  }
}
int main(){
  FILE *fin, *fout;
  int n, i, x, y;
  fin = fopen( "cerere.in", "r" );

  fscanf(fin, "%d", &n);
  for( i = 1; i <= n; i++ )
    fscanf( fin, "%d", &k[i] );
  for( i = 0; i < n; i++ ){
    fscanf(fin, "%d%d", &x, &y);
    v[x].push_back(y);
    val[y] = x;
  }

  i = 1;
  while( i <= n && val[i] != 0)
    i++;
  //cout << i;
  dfs(i, 1);

  fclose( fin );
  fout = fopen( "cerere.out", "w" );

  for( i = 1; i <= n; i++ ){
    fprintf(fout, "%d ", r[i]);
  }

  fclose( fout );
  return 0;
}