给一颗二叉树,每个点有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]));