Pagini recente » Cod sursa (job #1288040) | Cod sursa (job #2306040) | Cod sursa (job #1858114) | Cod sursa (job #1644813) | Cod sursa (job #284051)
Cod sursa(job #284051)
#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 cmp(int a, int b){
return cst[a] < cst[b];
}
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(*it);
}
sort(sub.begin(), sub.end(), cmp);
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) + 1);
fclose(g);
}
int main(){
citire();
solve();
return 0;
}