UVa 1496 - Peach Blossom Spring

博客介绍了如何使用斯坦纳树解决UVA 1496问题,强调了该问题不是简单的最短路或最小费用流,而是一个涉及树状结构的组合优化问题。通过弱化问题引入斯坦纳树的概念,并探讨了动态规划的状态转移方程,包括从前往后的状态转移和同层DP。最后,博主分享了在实现过程中遇到的疑问,关于同层DP的更新方式及其与最短路算法的关系。
摘要由CSDN通过智能技术生成

提示: 

1. 看到题目 , 最短路? 最小费用流?(博主才做完图论回来做这道题的第一反应) ... 可能你会想到枚举对应关系然后写k个最短路 ,但是可能存在一些点彼此联通 , 共用一些边 导致独立求最短路的情形是错误的。 我们不妨先将问题弱化一下 , 如果求这些点(前K个 和 后K个)彼此都联通, 你想到了什么?

2.  看完提示1 没有思路说明你和当时博主一样不熟悉一个根据动态规划为原理 , 广泛应用于组合的囊括最小生成树的一种树 , 斯坦纳树

3.  斯坦纳树算法就能求使一个给定点集内点彼此联通的最小代价(所包含的边可以是连接这个点集以外的点) , 如果用提示1.中的弱化问题 , 这就是一个裸的斯坦纳树题目(其方法会在之后介绍)

4.  假设你能够求出给定点集的斯坦纳树 , 你还是无法想出此题的思路往下看。 本题并不要求所有点联通 , 但至少两两联通 , 那么可以把答案看成几颗斯坦纳树 , 你的任务就是枚举这些树的可能形态 , 后来你会发现 , 那也是个动态规划   (dp是思想 , 不是具体方法)

5. 斯坦纳树网上有很多文章 , 可以到网上搜详细讲解 , 这里只给出dp状态转移方程和评价:


d [i] [s]  : 以i 为树根 , 包含集合s中所有点(s用二进制表示 , 并且s仅是所选点集中的点) , 不难发现状态数为 n*(2^k)  // n为节点数 , k 为所选点的个数


这里强调一下dp中一个重要概念 , 状态的顺序 , 如果两个状态a , b , a的dp值可以影响b的dp值 ,但是b的dp值不能影响a的dp值 , 简单点说就

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值