Pagini recente » Cod sursa (job #1613855) | Cod sursa (job #818480) | Cod sursa (job #187102) | Cod sursa (job #277399) | Cod sursa (job #938695)
Cod sursa(job #938695)
#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;
}