Pagini recente » Cod sursa (job #960123) | Cod sursa (job #628560) | Cod sursa (job #2899783) | Cod sursa (job #1218921) | Cod sursa (job #842130)
Cod sursa(job #842130)
#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;
}