Pagini recente » Cod sursa (job #2403906) | Cod sursa (job #1660853) | Cod sursa (job #1776140) | Cod sursa (job #151221) | Cod sursa (job #961118)
Cod sursa(job #961118)
#include <cstdio>
#include <vector>
using namespace std;
#define MAXN 100005
int N, S;
vector< int > con[MAXN];
int v[MAXN], nr[MAXN];
int NR = 0;
void dfs( int k )
{
vector<int> :: iterator it;
for (it = con[k].begin(); it != con[k].end(); it++)
dfs(*it),
nr[k] += nr[*it];
nr[k] += v[k];
for (; nr[k] > S; )
{
NR++;
int MAX = -1, MAXi = -1;
for (it = con[k].begin(); it != con[k].end(); it++)
if (nr[*it] > MAX)
MAX = nr[*it],
MAXi = *it;
nr[MAXi] = 0;
nr[k] -= MAX;
}
}
int main()
{
freopen("mese.in", "rt", stdin);
freopen("mese.out", "wt", stdout);
scanf("%d %d", &N, &S);
for (int i = 1; i <= N; i++)
{
int p;
scanf("%d %d", &p, v + i);
con[p].push_back(i);
}
dfs(0);
printf("%d\n", ++NR);
return 0;
}