#include <bits/stdc++.h> using namespace std; const int maxn=310; int n,dp[maxn][maxn]={0},G[maxn][maxn],m,w[maxn],select[maxn][maxn]={0},b[maxn]={0},c[maxn]={0};//b兄弟,c孩子 //将森林多叉树转换成二叉树 int main() { cin>>n>>m; for(int i=1;i<=n;i++){ int x; cin>>x>>w[i]; //要求输入按照根往下的顺序输入边,比如1->2 1->3 不会一会正一会负 1->2 3->1;这里输入的是依赖边 //因为某个点的孩子存那个都行,这样通过c,获得第一个孩子,然后兄弟迭代(右孩子到底)获得所有兄弟 //第i个点的左子树是孩子,右子树是兄弟,所以b[maxn],c[maxn],就是对应的左右子树数组 b[i]=c[x]; c[x]=i; } // dfs(0,-1); cout<<dp[0][m]<<endl; return 0; }