Pagini recente » Cod sursa (job #1277851) | Cod sursa (job #1776096) | Cod sursa (job #2896689) | Cod sursa (job #1599320) | Cod sursa (job #45495)
Cod sursa(job #45495)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define maxn 100010
#define pb push_back
int n,S,x;
vector <int> a[maxn];
int cost[maxn],c[maxn],d[maxn],g[maxn],p[maxn];
int cmp(int i,int j)
{
return d[a[x][i]]<d[a[x][j]];
}
void DFS(int nod)
{
int i;
for (i=0;i<g[nod];i++) DFS(a[nod][i]);
if (g[nod]==0)
{
c[nod]=1;
d[nod]=cost[nod];
}
else {
for (i=0;i<g[nod];i++) p[i]=i;
x=nod;
sort(p,p+g[nod],cmp);
d[nod]=cost[nod];
c[nod]=1;
for (i=0;i<g[nod];i++) c[nod]+=c[a[nod][i]];
for (i=0;i<g[nod] && d[nod]+d[a[nod][p[i]]]<=S;i++)
{
d[nod]+=d[a[nod][p[i]]];
c[nod]--;
}
}
}
int main()
{
freopen("mese.in","r",stdin);
freopen("mese.out","w",stdout);
int i,x,y;
scanf("%d %d ",&n,&S);
for (i=1;i<=n;i++)
{
scanf("%d %d ",&x,&cost[i]);
a[x].pb(i);
}
for (i=0;i<=n;i++) g[i]=a[i].size();
DFS(0);
printf("%d\n",c[0]);
return 0;
}