Pagini recente » Cod sursa (job #1230612) | Cod sursa (job #1265644) | Cod sursa (job #1425698) | Cod sursa (job #1722752) | Cod sursa (job #338679)
Cod sursa(job #338679)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define file_in "mese.in"
#define file_out "mese.out"
#define Nmax 101000
#define pb push_back
#define pob pop_back
vector<int> v[Nmax];
int n,S,s[Nmax],suma,x,rad;
int cmp(int a, int b)
{
return s[a]<s[b];
}
int dfs(int nod)
{
int i,nr=0;
vector<int> :: iterator it;
vector<int> p;
for (it=v[nod].begin();it!=v[nod].end();++it)
{
nr+=dfs(*it);
p.pb(*it);
}
sort(p.begin(),p.end(),cmp);
for (i=p.size()-1; i>1 && s[nod]>S;--i)
{
s[nod]-=s[p[i]];
p.pob();
nr++;
}
return nr;
}
int main()
{
int i;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &n,&S);
for (i=1;i<=n;++i)
{
scanf("%d %d", &x,&s[i]);
if (x==0) rad=i;
else v[x].pb(i);
}
//nr=0;
printf("%d", dfs(rad)+1);
fclose(stdin);
fclose(stdout);
return 0;
}