Cod sursa(job #284049)

Utilizator katakunaCazacu Alexandru katakuna Data 20 martie 2009 21:55:58
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

int S, rad , n , i, x, cst[100111];
vector <int> v[100111];


void citire(){

	FILE *f = fopen("mese.in", "r");
	
	fscanf(f,"%d %d",&n,&S);
	for(i=1; i<=n; i++){
		fscanf(f,"%d %d",&x, &cst[i]);
		
		if(x) v[x].push_back(i);
		else  rad = i;
	}
	
	fclose(f);
}


int DFS(int nod){

	int nr = 0;
	vector <int>::iterator it;
	vector <int> sub;
	
	for(it = v[nod].begin(); it != v[nod].end(); it++){
		nr+=DFS(*it);
		
		cst[nod]+=cst[*it];
		sub.push_back(cst[*it]);
	}
	
	sort(sub.begin(), sub.end());
	
	for( i=sub.size() - 1;  cst[nod] > S && i>=0; i--){
		cst[nod]-=sub[i];
		sub.pop_back();
		nr++;
	}
	
	return nr; 
	
}

void solve(){

	FILE *g = fopen("mese.out", "w");
	fprintf(g,"%d",DFS(rad) + 1);
	fclose(g);
	
}

int main(){

	citire();
	solve();

	return 0;
}