Pagini recente » Cod sursa (job #467198) | Cod sursa (job #2148816) | Cod sursa (job #2804810) | Cod sursa (job #2708131) | Cod sursa (job #940457)
Cod sursa(job #940457)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define sz size()
#define pb push_back
#define all(v) v.begin(), v.end()
#define x first
#define y second
#define Nmax 100005
int n, s, rad, rez;
int sum[Nmax];
pair< int, int > v[Nmax];
vector<int> vec[Nmax];
vector<int> aux;
void readdata()
{
freopen("mese.in", "r", stdin);
freopen("mese.out", "w", stdout);
int i, v1, v2;
scanf("%d %d", &n, &s);
for (i = 1; i <= n; ++i)
{
scanf("%d %d", &v1, &sum[i]);;
if (v1 == 0) rad = i;
else vec[v1].pb(i);
}
}
void df(int k)
{
int i, cur;
for (i = 0; i < vec[k].sz; ++i)
df(vec[k][i]);
aux.clear();
for (i = 0; i < vec[k].sz; ++i)
{
v[k].y += v[ vec[k][i] ].y;
aux.pb(v[ vec[k][i] ].x);
}
sort(all(aux));
cur = sum[k];
for (i = 0; i < aux.sz; ++i)
{
cur += aux[i];
if (cur > s)
{
cur -= aux[i];
v[k].y += aux.sz-i;
v[k].x = cur;
return;
}
}
v[k].x = cur;
}
int main()
{
readdata();
df(rad);
printf("%d\n", v[rad].y+1);
return 0;
}