2021CCPC东北四省赛 C. Vertex Deletion 树形DP

这篇博客介绍了如何使用树形动态规划(DP)解决图的连通性问题。通过定义节点的三种状态并建立状态转移方程,博主详细解释了算法的实现过程,并提供了C++代码示例。在代码中,博主展示了如何进行深度优先搜索(DFS)来计算每个节点的状态,并最终输出连通组件的总数。

传送门

分析

树形DP
我们用 f [ u ] [ 0 / 1 / 2 ] f[u][0/1/2] f[u][0/1/2]表示 u u u节点的三个状态

  • 删除 u u u节点
  • 不删除 u u u节点但是与子节点连接
  • 不删除 u u u节点也不与子节点连接
    那么,不难写出状态转移方程
    f [ u ] [ 0 ] + = f [ v ] [ 1 ] + f [ v ] [ 0 ] f[u][0] += f[v][1] + f[v][0] f[u][0]+=f[v][1]+f[v][0]
    f [ u ] [ 1 ] + = f [ v ] [ 1 ] + f [ v ] [ 0 ] + f [ v ] [ 2 ] , f [ u ] [ 2 ] − = f [ u ] [ 1 ] f[u][1] += f[v][1] + f[v][0] + f[v][2], f[u][2] -= f[u][1] f[u][1]+=f[v][1]+f[v][0]+f[v][2],f[u][2]=
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值