Cod sursa(job #1118298)

Utilizator thebest001Neagu Rares Florian thebest001 Data 24 februarie 2014 09:47:19
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>
#include <vector>
using namespace std;
#define MAX 100001

vector<int> a[MAX];
int cost[MAX];
int sol[MAX];
int g[MAX];

int q[MAX];
void dfs(int x) {
  q[++q[0]] = x;
  sol[x] = 1 + sol[q[q[0] - cost[x]]];
    for (vector<int>::iterator i = a[x].begin(); i != a[x].end(); i++) {
    dfs(*i);
  }
  q[0]--;
}

int main() {
  freopen("cerere.in", "r", stdin);
  freopen("cerere.out", "w", stdout);
  int n;
  scanf("%d",&n);
  for (int i = 1; i <= n; i++)
    scanf("%d", &cost[i]);

  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    a[x].push_back(y);
    g[y]++;
  }

  for (int i = 1; i <= n; i++) {
    if (!g[i]) {
      dfs(i);
      break;
    }
  }
  for (int i = 1; i <=n ; i++) {
    printf("%d ",sol[i]-1);
  }
  return 0;

}