给一颗二叉树,每个点有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]));
浙公网安备 33010602011771号