Pagini recente » Cod sursa (job #1682478) | Cod sursa (job #1472164) | Cod sursa (job #417124) | Cod sursa (job #2356398) | Cod sursa (job #50893)
Cod sursa(job #50893)
#include <stdio.h>
#include <set>
#define mp make_pair
#define f first
#define s second
#define NMax 100005
using namespace std;
int N, S, U[NMax], deg[NMax], C[NMax], rad = 0, bst = 1;
set< pair<int, int> > A;
int main()
{
int i, nod, cost;
set< pair<int, int> >::iterator it;
freopen("mese.in", "r", stdin);
freopen("mese.out", "w", stdout);
scanf("%d %d", &N, &S);
for (i = 1; i <= N; i++)
{
scanf("%d %d", &U[i], &C[i]);
if (!U[i]) rad = i;
deg[i]++; deg[U[i]]++;
}
for (i = 1; i <= N; i++)
if (deg[i] == 1 && i != rad)
A.insert( mp(C[i], i) );
deg[0] = 0; deg[rad]--;
for (i = 1; i < N; i++)
{
it = (A.begin());
cost = it->f; nod = it->s;
if (cost + C[U[nod]] <= S)
C[U[nod]] += cost;
else
bst++;
deg[U[nod]]--;
A.erase(it);
if (deg[U[nod]] == 1 && U[nod] != rad)
A.insert( mp(C[U[nod]], U[nod]) );
}
printf("%d\n", bst);
return 0;
}