题目
分析
代码
1 #include<iostream>
2 using namespace std;
3 struct sb
4 {
5 int to,nx,w;
6 }g[10001];
7 int cnt,list[10001];
8 void add(int x,int y,int w)
9 {
10 g[++cnt].to=y; g[cnt].nx=list[x]; g[cnt].w=w; list[x]=cnt;
11 }
12 long long ans;
13 int f[1001][1001],t[1001];
14 void dfs(int x,int y)
15 {
16 for (int i=list[x];i;i=g[i].nx)
17 dfs(g[i].to,min(y,g[i].w));
18 if (!x)
19 {
20 for (int i=list[x];i;i=g[i].nx)
21 ans+=f[g[i].to][g[i].w];
22 return;
23 }
24 for (int i=t[x];i<=y;i++)
25 f[x][i]=1;
26 for (int i=list[x];i;i=g[i].nx)
27 for (int j=y;j+1;j--)
28 for (int k=0;k<=min(j,g[i].w);k++)
29 f[x][j]=max(f[x][j],f[x][j-k]+f[g[i].to][k]);
30 }
31 int main ()
32 {
33 int n;
34 cin>>n;
35 for (int i=1,x,y;i<=n;i++)
36 {
37 cin>>x>>t[i]>>y;
38 add(x,i,y);
39 }
40 dfs(0,21321937);
41 cout<<ans;
42 }