后面3个点都会死循环 搞不懂为什么 ;w;
死循环但不会爆栈,离大谱
#include<bits/stdc++.h>
using namespace std;
int n,m,w[301];
struct g{
int fa;
int l;
int r;
}tr[301];
int f(int x,int h,int step){
if(!x){
return 0;
}
if(h==1){
return max(w[x],w[tr[x].r]);
}
if(h<=0){
return 0;
}
int i,j=0,p;
for(i=0;i<=h-1;i++){
if(!tr[x].r&&i!=0){
continue;
}
j=max(f(tr[x].r,i,step+1)+w[x]+f(tr[x].l,h-i-1,step+1),j);
}
p=max(j,f(tr[x].r,h,step+1));
return p;
}
int main(){
int i,j,k,p,q;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d %d",&j,&w[i]);
if(!tr[j].l){
tr[j].l=i;
tr[i].fa=j;
}else{
k=tr[tr[j].l].r;
p=tr[j].l;
while(k){
p=k;
k=tr[k].r;
}
tr[p].r=i;
tr[i].fa=p;
}
}
printf("%d",f(tr[0].l,m,1));
return 0;
}