Pagini recente » Cod sursa (job #558980) | Cod sursa (job #431065) | Cod sursa (job #1096247) | Cod sursa (job #1031034) | Cod sursa (job #45831)
Cod sursa(job #45831)
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
#define MAX_N 100005
#define FIN "mese.in"
#define FOUT "mese.out"
#define f first
#define s second
#define pb push_back
#define mp make_pair
int N, S; pair<int, short> bst[MAX_N];
vector<int> G[MAX_N];
void DFS(int n)
{
vector<int>::iterator it;
vector<short> V;
for (it = G[n].begin(); it != G[n].end(); it++)
{
DFS(*it);
bst[n].f += bst[*it].f;
}
for (it = G[n].begin(); it != G[n].end(); it++)
V.pb(bst[*it].s);
sort(V.begin(), V.end());
for (it = V.begin(); it != V.end(); it++)
{
if (bst[n].s+*it > S) break;
bst[n].s += *it; bst[n].f--;
}
}
int main(void)
{
int i, up, c, root = 0;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d", &N, &S);
for (i = 1; i <= N; i++)
{
scanf("%d %d", &up, &c);
G[up].pb(i);
bst[i] = mp(1, c);
if (!up) root = i;
}
DFS(root);
printf("%d\n", bst[root].f);
return 0;
}