Pagini recente » Cod sursa (job #1499267) | Cod sursa (job #2882737) | Cod sursa (job #1192199) | Cod sursa (job #147209) | Cod sursa (job #44911)
Cod sursa(job #44911)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define MAXN 100005
int N, S;
vector< int > con[MAXN];
int v[MAXN], nr[MAXN];
int NR = 0;
int cmp(int a, int b) { return nr[a] > nr[b]; }
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];
if (nr[k] > S)
{
sort( con[k].begin(), con[k].end(), cmp );
for (it = con[k].begin(); nr[k] > S; it++)
{
NR++;
nr[k] -= nr[*it];
nr[*it] = 0;
}
}
}
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;
}