Cod sursa(job #2169909)

Utilizator serban24Popovici Serban-Florin serban24 Data 14 martie 2018 19:10:10
Problema Cerere Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define NMAX 100005

using namespace std;

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

vector <int> mv[NMAX];
int cerere[NMAX];
int answer[NMAX];
int dist[NMAX];
queue <int> q;

int BFS(int x, int k){
	int i,val,nr=0;

	val=cerere[x];
	q.push(x);

	while(!q.empty()){
		x=q.front();
		q.pop();

		if(nr==val){
			k++;
			nr=0;
			val=cerere[x];
		}

		for(i=0;i<mv[x].size();i++){
			q.push(mv[x][i]);
			nr++;
		}
	}

	return k;
}

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

	fin>>n;

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

	for(i=1;i<n;i++){
		fin>>x>>y;
		mv[y].push_back(x);
	}

	for(i=1;i<=n;i++)
		if(cerere[i])
			answer[i]=BFS(i,0);

	for(i=1;i<=n;i++)
		fout<<answer[i]<<" ";

    return 0;
}