Cod sursa(job #1740526)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 11 august 2016 18:09:01
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.75 kb
#include <fstream>
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <set>
#include <algorithm>
#define pb push_back
#define NMAX 100005
#define INF 0x3f3f3f3f

using namespace std;

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

int k[NMAX],dist[NMAX],st[NMAX],p[NMAX],vf;
vector<int> v[NMAX];

void DFS(int x, int depth) {
	st[depth]=x;
	dist[x]=dist[st[depth-k[x]]]+1;
	for(int i=0;i<v[x].size();++i)
		DFS(v[x][i], depth+1);
}

int main() {
	int n,i,x,y;

	fin>>n;
	for(i=1;i<=n;++i) fin>>k[i];
	for(i=1;i<n;++i) {
		fin>>x>>y;
		p[y]=x;
		v[x].pb(y);
	}

	x=1;
	while(p[x]!=0) x=p[x];

	DFS(x,1);

	for(i=1;i<=n;++i) fout<<dist[i]-1<<' ';

	return 0;
}