Pagini recente » Cod sursa (job #2043396) | Cod sursa (job #384127) | Cod sursa (job #2926970) | Cod sursa (job #1643719) | Cod sursa (job #47886)
Cod sursa(job #47886)
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 100000;
int s, n, i;
int val[maxn],v[maxn];
int j;
vector<int> vect[maxn];
int x, ans;
bool cmp(const int &i, const int &j)
{
return val[i] > val[j];
}
void dfs(int i)
{
vector<int> :: iterator it;
for(it = vect[i].begin();it != vect[i].end(); ++it)
{
dfs(*it);
}
sort(vect[i].begin(),vect[i].end(),cmp);
int j = 0;
val[i] += v[i];
for(it = vect[i].begin();it != vect[i].end(); ++it)
{
if (val[i] + val[*it] > s) break;
++j;
val[i] += val[*it];
}
ans += vect[i].size() - j;
}
int main()
{
freopen("mese.in","r",stdin);
freopen("mese.out","w",stdout);
scanf("%d %d",&n,&s);
int st = 0;
for(i = 1;i <= n; ++i)
{
scanf("%d %d",&x,&v[i]);
if (x != 0)
{
vect[x].push_back(i);
}
if (x == 0)
{
st = i;
}
}
dfs(st);
printf("%d\n",ans);
return 0;
}