Pagini recente » Cod sursa (job #1433478) | Cod sursa (job #2587517) | Cod sursa (job #2919681) | Cod sursa (job #2824684) | Cod sursa (job #97006)
Cod sursa(job #97006)
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
#define NMax 100005
int N, S, q[NMax], SUM[NMax], bst;
vector<int> G[NMax];
int cmp(const int& a, const int& b)
{ return SUM[a] < SUM[b]; }
int main(void)
{
int i, fiu, ql, qr, sz, rad = -1, nod;
freopen("mese.in", "r", stdin);
freopen("mese.out", "w", stdout);
scanf("%d %d", &N, &S);
for (i = 1; i <= N; i++)
{
scanf("%d %d", &qr, &SUM[i]);
if (qr)
G[qr].push_back(i);
else
rad = i;
}
for (q[ql=qr=1]=rad; qr <= ql; qr++)
for (sz = G[q[qr]].size(), i = 0; i < sz; i++)
q[++ql] = G[q[qr]][i];
for (i = N; i; i--)
{
nod = q[i];
sz = G[nod].size();
if (!sz) continue;
sort(G[nod].begin(), G[nod].end(), cmp);
for (qr = 0; qr < sz; qr++)
{
fiu = G[nod][qr];
if (SUM[nod] + SUM[fiu] <= S)
SUM[nod] += SUM[fiu];
else
{
bst += sz-qr;
break;
}
}
}
printf("%d\n", bst+1);
return 0;
}