Pagini recente » Cod sursa (job #2007028) | Cod sursa (job #184989) | Cod sursa (job #2257079) | Cod sursa (job #2912071) | Cod sursa (job #832740)
Cod sursa(job #832740)
#include <cstdio>
#include <vector>
#include <algorithm>
#define maxn 100100
using namespace std;
int n, i, j, sol, s, a, b, rad;
vector <int> v[maxn];
short int c[maxn];
int sum[maxn];
bool cmp(int a, int b) {
if (a > b)
return true;
return false;
}
void df(int nod) {
int st[maxn], niv;
st[1] = nod; niv = 1;
int i, fiu;
vector <int> p;
p.clear();
sum[nod] = c[nod];
for (i = 0; i < v[nod].size(); i++) {
fiu = v[nod][i];
df(fiu);
sum[nod] += sum[fiu];
if (sum[nod]>=s) sol++,sum[nod]=c[nod];
}
}
int main() {
freopen("mese.in", "r", stdin);
freopen("mese.out", "w", stdout);
scanf("%d%d", &n, &s);
for (i = 1; i <= n; i++) {
scanf("%d%d", &a, &c[i]);
if (a)
v[a].push_back(i);
else
rad = i;
}
df(rad); //am calculat sumele pentru subarbori, si tot acolo fac si partea cu impartitu pe sub-arbori
printf("%d\n", sol);
return 0;
}