定义 f[rt][0/1/2] 表示以 rt 为根的子树,选择了 rt/没选择 rt,但是 rt 被点亮了/rt 没有被点亮,其他节点全部被点亮的最小选择点数
理论上来说,如下的状态转移是错误的:
f[rt][0]=1;
f[rt][1]=N;
for(int i=Head[rt];i;i=E[i].nxt)
{
int son=E[i].to;
if(son==fa) continue;
dfs(son,rt);
f[rt][0]+=min(min(f[son][0],f[son][1]),f[son][2]);
f[rt][1]=min(f[rt][2]+f[son][0],f[rt][1]+min(f[son][0],f[son][1]));
f[rt][2]+=f[son][1];
}
因为这种转移可能出现儿子全都不选的可能
但是,这段代码过了
我证不出来这段转移的正确性,求助