Pagini recente » Cod sursa (job #1721019) | Cod sursa (job #2789685) | Cod sursa (job #3244526) | Cod sursa (job #2692999) | Cod sursa (job #284011)
Cod sursa(job #284011)
#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++){
sub.push_back(*it);
nr+=DFS(*it);
cst[nod]+=cst[*it];
}
sort(sub.begin(), sub.end());
for( i=sub.size() - 1; cst[nod] > S && i>=0; i--){
cst[nod]-=cst[sub[i]];
sub.pop_back();
nr++;
}
return nr;
}
void solve(){
FILE *g = fopen("mese.out", "w");
fprintf(g,"%d",DFS(rad));
fclose(g);
}
int main(){
citire();
solve();
return 0;
}