思路:
我们直接贪心,按e从小到大来取。
因为不管e是多少,取了它贡献就只有1,那肯定是取最小的好
c o d e code code
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int n, fa[10010], edg[10010], ans;
struct node {
int val, id;
}a[10010];
bool cmp(node x, node y) {
return x.val < y.val;
}
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i ++) {
scanf("%d%d%d", &fa[i], &a[i].val, &edg[i]);
a[i].id = i;
}
sort(a + 1, a + 1 + n, cmp);
for(int i = 1; i <= n; i ++) {
bool flag = 0;
for(int j = a[i].id; j; j = fa[j])
if(edg[j] < a[i].val) { flag = 1; break; }
if(flag) continue;
for(int j = a[i].id; j; j = fa[j]) edg[j] -= a[i].val;
ans ++;
}
printf("%d", ans);
return 0;
}