UVa 1292 - Strategic game (树形dp)
2013-08-07 18:32
211 查看
本文出自 http://blog.csdn.net/shuangde800
f[u][0]: 表示不选i点,覆盖这个子树的最少点
f[u][1]:选i点,覆盖这个子树的最少点
对于u点,如果选择这个点,那么他的字节点可选也可不选
如果不选u点的话,那么它的子结点就必须要选!开始时我以为字节点只要至少选一个就可以了,但是这样是错的!
因为会出现下面这种情况:
![](http://img.blog.csdn.net/20130807004421406?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1YW5nZGU4MDA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
顶点1不选,子节点中2有选了,但是3却没有相邻结点有选。
所以可以得到状态转移方程:
f[u][1] = sum{ min{f[v][0], f[v][1]}, v是u的子结点 }
f[u][0] = sum{ f[v][1], v是u的子结点 }
题目链接: 点击打开链接
题目大意
给定一棵树,选择尽量少的节点,使得每个没有选中的结点至少和一个已选结点相邻。思路
经典的树形dp题,据说是最小顶点覆盖。f[u][0]: 表示不选i点,覆盖这个子树的最少点
f[u][1]:选i点,覆盖这个子树的最少点
对于u点,如果选择这个点,那么他的字节点可选也可不选
如果不选u点的话,那么它的子结点就必须要选!开始时我以为字节点只要至少选一个就可以了,但是这样是错的!
因为会出现下面这种情况:
顶点1不选,子节点中2有选了,但是3却没有相邻结点有选。
所以可以得到状态转移方程:
f[u][1] = sum{ min{f[v][0], f[v][1]}, v是u的子结点 }
f[u][0] = sum{ f[v][1], v是u的子结点 }
代码
相关文章推荐
- UVA1292-----Strategic game-----树形DP解决树上的最小点覆盖问题
- UVA 1292-Strategic game(树形DP)
- Uva 1292 - Strategic game 树形dp 最小点覆盖
- uva 1292 - Strategic game(树形dp)
- UVa:1292 Strategic game(树形DP)
- Uva 1292 - Strategic game 树形dp 最小点覆盖
- UVA 1292 Strategic game(树形dp)
- UVa 1292 - Strategic game (树形dp)
- UVA 1292 - Strategic game(树形dp)
- UVA1292-----Strategic game-----树形DP解决树上的最小点覆盖问题
- UVALive 2038 - Strategic game (经典树形DP)
- uva 1292 树形dp
- uva1292(基础树形dp)
- uva 1292(树形dp)
- uva 1292 树形dp
- UVALive 2038 Strategic game (树形DP,4级)
- UVALive 2038 Strategic game (树形DP,4级)
- UVALive 2038 Strategic game--树形dp
- uva1292 树形dp
- 【树形dp】UVALive 2038 Strategic game