传送门
分析
树形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]−=

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

被折叠的 条评论
为什么被折叠?



