给一颗二叉树,每个点有3种颜色可以涂,但相邻的点不能同色,问最少能有几个绿色的点

 

f[i][1] = f[L][0]+f[R][0]+1

 f[i][0] = max( f[L][0]+f[R][1] , f[R][0]+f[L][1])

 

for(i=n;i>0;i--){
 	f[i][1]=f[tr[i].l][0]+f[tr[i].r][0]+1;
 	f[i][0]=
 max(f[tr[i].l][1]+f[tr[i].r][0],f[tr[i].l][0]+f[tr[i].r][1]);
	}
	printf("%d ",max(f[1][0],f[1][1]));
	
	for(i=n;i>0;i--){
	f[i][1]=f[tr[i].l][0]+f[tr[i].r][0]+1;
 	f[i][0]=
 min(f[tr[i].l][1]+f[tr[i].r][0],f[tr[i].l][0]+f[tr[i].r][1]);
	}
	printf("%d",min(f[1][0],f[1][1]));

 

posted on 2023-03-06 15:01  towboat  阅读(13)  评论(0)    收藏  举报