Cod sursa(job #2986733)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 28 februarie 2023 23:34:57
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
//Ilie Dumitru
#include<cstdio>
#include<vector>
const int NMAX=100005;

int N, M;
int v[NMAX], stiva[NMAX], nrSteps[NMAX], areTata[NMAX];
std::vector<int> fii[NMAX];

void dfs(int node, int depth=0)
{
	std::vector<int>::iterator i0, i1;
	stiva[depth]=node;

	if(v[node]!=0)
		nrSteps[node]=nrSteps[stiva[depth-v[node]]]+1;

	for(i0=fii[node].begin(), i1=fii[node].end();i0!=i1;++i0)
		dfs(*i0, depth+1);
}

int main()
{
	FILE* f=fopen("cerere.in", "r"), *g=fopen("cerere.out", "w");
	int i, a, b;
	fscanf(f, "%d", &N);
	for(i=0;i<N;++i)
		fscanf(f, "%d", v+i);
	for(i=1;i<N;++i)
	{
		fscanf(f, "%d%d", &a, &b);
		fii[a-1].push_back(--b);
		areTata[b]=1;
	}

	for(i=0;i<N && areTata[i];++i);
	a=i;

	dfs(a);

	for(i=0;i<N;++i)
		fprintf(g, "%d ", nrSteps[i]);
	fprintf(g, "\n");

	fclose(f);
	fclose(g);
	return 0;
}