题目
n(n<=3e3)个点,m(0<=m<=C(n,2))条边的无向图,
第i条边连接xi和yi,代价为ci(0<=ci<=1e7),
保证图连通且无重边,保证所有边代价之和<=1e9
以下,有q(q<=1e4)种互斥的破坏的可能,
第j种会把连接xj和yj之间的边,调升至cj(保证cj比原来大,且cj<=1e7)
最终会等概率地选择其中一种进行破坏,
问将n个点连通在一起的期望代价和
思路来源
https://www.cnblogs.com/samhx/p/HDU-4126.html
题解
翻了好几篇题解都没懂,最后翻到了这位博主的博客,
这位博主也翻了好几篇才懂,最终讲的也很清楚明白,树形dp还是博大精深啊orz
对q种情况,每一种情况求其对应的最小生成树代价,最终除以q即为答案
①如果不在最小生成树上,生成树代价不变,
②如果这条边在最小生成树上,相当于将原树拆成两棵树,
最小生成树代价为两棵生成树的代价,加上这两棵树外一条最小边(注意破坏边边权已被放大)的代价
第一部分是最小生成树,先套kruskal,然后要把最小生成树实际建出来,
对这棵最小生成树搞树形dp,dp[u][v]代表u和v通过不在生成树上的边达到连通的最小代价
具体实现时,通过枚举根rt,根rt到叶节点之间相通只能通过直连更新,
此时,认为最小生成树是一棵rt为根的树,叶节点是一棵树,通过叶节点到rt的距离更新
回溯非叶节点u->v时,认为u已经和根rt相通,v已经得到了最小的树外边代价,dis[u][v]与tmp取小
再向上回溯时,把u和

探讨了在无向图中,面对多种破坏可能时,如何利用树形DP和最小生成树理论计算连通所有点的期望代价。通过Kruskal算法构建最小生成树,并对树形DP进行深入解析,实现对复杂破坏情况下的最优路径计算。
最低0.47元/天 解锁文章
3038

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



