Cod sursa(job #2847152)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 10 februarie 2022 12:46:59
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("cerere.in");
ofstream fout ("cerere.out");

const int NMAX = 1e5;
vector <int> g[NMAX + 2];
int k[NMAX + 2];
bool viz[NMAX + 2];
int dp[NMAX + 2];
bool viz2[NMAX + 2];
int arb[NMAX + 2];

void dfs (int nod, int lvl) {
  viz[nod] = 1;
  arb[lvl] = nod;
  dp[nod] = dp[arb[lvl - k[nod]]] + 1;

  for (int x : g[nod])
    if (!viz[x])
      dfs(x, 1 + lvl);
}

int main() {
  int n, i, a, b;
  fin >> n;

  for (i = 1; i <= n; ++i)
    fin >> k[i];

  for (i = 1; i <= n; ++i) {
    fin >> a >> b;
    g[a].push_back(b);
    viz2[b] = 1;
  }

  i = 1;
  while (i <= n && viz2[i])
    ++i;

  dfs(i, 0);

  for (i = 1; i <= n; ++i)
    fout << dp[i] - 1 << " ";
  return 0;
}