Pagini recente » Autentificare | Cod sursa (job #2723147) | Cod sursa (job #1711551) | Cod sursa (job #38579) | Cod sursa (job #603641)
Cod sursa(job #603641)
# include <algorithm>
# include <cstdio>
# include <vector>
using namespace std;
const char *FIN = "mese.in", *FOU = "mese.out";
const int MAX = 100005;
# define x first
# define y second
int N, S, df;
vector <int> G[MAX];
pair <short, int> dp[MAX];
void dfs (int N) {
for (vector <int> :: iterator it = G[N].begin (); it != G[N].end (); *it = dp[*it++].x) {
dfs (*it), dp[N].y += dp[*it].y;
}
sort (G[N].begin (), G[N].end ());
for (vector <int> :: iterator it = G[N].begin (); it != G[N].end (); ++it) {
if (dp[N].x + *it > S) break ;
dp[N].x += *it, --dp[N].y;
}
}
int main (void) {
freopen (FIN, "r", stdin);
scanf ("%d %d", &N, &S);
for (int i = 1, sef, varsta; i <= N; ++i) {
scanf ("%d %d", &sef, &varsta);
G[sef].push_back (i), dp[i] = make_pair (varsta, 1);
if (sef == 0) df = i;
}
dfs (df);
fprintf (fopen (FOU, "w"), "%d", dp[df].y);
}