求助,递归死循环了 40pts
查看原帖
求助,递归死循环了 40pts
461689
OoWJZZoO楼主2022/2/8 14:19

后面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;
}
2022/2/8 14:19
加载中...