Cod sursa(job #643106)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 2 decembrie 2011 22:22:48
Problema Cerere Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream>
#include<vector>
#define NMAX 100100
using namespace std;
vector <int> A[NMAX];
int n,radacina,v[NMAX],sol[NMAX],drum[NMAX];
void afis() {
	int i;
	ofstream out("cerere.out");
	for(i=1;i<=n;i++)
		out<<sol[i]<<' ';
	out<<'\n';
	out.close();
}
void dfs(int nod,int nivel) {
	unsigned int i,j;
	drum[nivel]=nod;
	if(v[nod]==0)
		sol[nod]=0;
	else
		sol[nod]=sol[drum[nivel-v[nod]]]+1;
	for(i=0;i<A[nod].size();i++) {
		j=A[nod][i];
		dfs(j,nivel+1);
		}
}
void citire() {
	int i,x,y;
	ifstream in("cerere.in");
	in>>n;
	for(i=1;i<=n;i++)
		in>>v[i];
	radacina=n*(n+1)>>1;
	for(i=1;i<n;i++) {
		in>>x>>y;
		A[x].push_back(y);
		radacina-=y;
		}
	in.close();
}
int main() {
	citire();
	dfs(radacina,1);
	afis();
	return 0;
}