思路:二叉苹果树模板题
代码:
- #include
- #include
- #include
- #include
- #include
- using namespace std;
- const int N=1010;
- int n,m;
- int idx,e[N],h[N],w[N],ne[N];
- int f[N][N];
- void add(int a,int b,int c)
- {
- e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;
- }
- void dfs(int root)
- {
- for(int i=h[root];~i;i=ne[i])
- {
- dfs(e[i]);
- for(int j=m;j>0;j--)
- for(int k=0;k
- f[root][j]=max(f[root][j],f[root][j-k-1]+f[e[i]][k]+w[i]);
- }
- }
- int main()
- {
- cin>>n>>m;
- memset(h,-1,sizeof h);
- for(int i=1;i<=n;i++)
- {
- int a,b;
- cin>>a>>b;
- add(a,i,b);
- }
- dfs(0);
- cout<
0][m]; - return 0;
- }