HDU 4085 斯坦纳树+DP】的更多相关文章

https://cn.vjudge.net/problem/HDU-4085 给你n,m,k ,分别表示有n个点,m条边,每条边有一个权值,表示修复这条边需要的代价 从前k个点中任取一个使其和后k个点中的某一个点,通过边连接,并且必须是一一对应,问最小的代价是多少. 先用斯坦纳树模板求出f[i][1<<k]    然后用dp[i]表示所有点为根的情况下连通状态为i的最小花费 这样我们就可以从1dp到1<<k得到答案 注意dp之前要先判总状态是否合法 再判子集是否合法 最后再进行dp…
题目大意: 给定无向图,让前k个点都能到达后k个点(保护地)中的一个,而且前k个点每个需要占据后k个中的一个,相互不冲突 找到实现这个条件达到的选择边的最小总权值 这里很容易看出,最后选到的边不保证整个图是联通的 我们只要计算出每一个连通的最小情况,最后跑一遍dfs就能计算出答案了 那么用dp[i][j]表示 i 点为根得到联通状态为 j 的情况需要选到的边的最小总权值 这个用斯坦纳树的思想就可以做到的 对于每一个状态,都用spfa跑一遍得到最优解 dp[i][j] = min(dp[i][j]…
思路:虚拟一个0号节点,将每个点建一条到0号节点的边,权值为挖井需要的价值.并要保证0号节点同另外n个寺庙一样被选择即可. 然后就是求斯坦纳树了. #include<map> #include<set> #include<cmath> #include<queue> #include<cstdio> #include<vector> #include<string> #include<cstdlib> #inc…
传送门 题意: 给出\(n\)个重要点,还有其余\(m\)个点,\(p\)条边. 现在要在这\(n+m\)个点中挖几口水井,每个地方的费用为\(w_i\).连接边也有费用. 问使得这\(n\)个地点都有水井(或直接.间接与水井相连)的最小代价. 思路: 有点巧妙..建立一个虚点连向所有点,边权为\(w_i\).然后直接求以\(0\)为根的斯坦纳树即可,最后再子集\(dp\)一下就行. 原理就是,此时这\(n\)个点连通,并且以\(0\)为根,脑补一下即可发现:要么直接与\(0\)相连,要么间接相…
题目链接 题意: 给出\(n\)个点,\(m\)条边,同时给出\(p\)个重要的点以及对应特征. 现在要选出一些边,问使得这\(p\)个所有特征相同的点相连,问最小代价. 思路: 斯坦纳树的应用场景一般就为:使得一些点连通,在此基础上,允许连接一些其它的点,加入一些其它的边.可以说最小生成树是斯坦纳树的一个特例. 那么这个题首先看到要使\(p\)个点连通,那么就可以斯坦纳树搞一搞. 因为题目要求特征相同的点相连,斯坦纳树搞出来后还不够,他要求的是一个斯坦纳树森林. 我们将特征相同的所有点扣出来,…
[Luogu4294] 题解 : 斯坦纳树 \(dp[i][j]\) 表示以\(i\)号节点为根,当前状态为\(j\)(与\(i\)连通的点为\(1\)) 当根\(i\)不改变时状态转移方程是: \(dp[i][j] = \min_{s \in j}\{dp[i][s] + dp[i][\complement_js] - val[i]\}\) 当根改变时,要求\(i,k\)相邻 : \(dp[i][j] = \min\{dp[k][j] + val[i]\}\) 记录\(pre[i][now]\…
状态压缩dp+spfa解斯坦纳树 枚举子树的形态 dp[i][j] = min(dp[i][j], dp[i][k]+dp[i][l]) 当中k和l是对j的一个划分 依照边进行松弛 dp[i][j] = min(dp[i][j], dp[i'][j]+w[i][j])当中i和i'之间有边相连 #include <cstdio> #include <cstring> #include <queue> using namespace std; const int maxn…
题意:见题面(我发现自己真是越来越懒了) 有N*M的矩阵,每个格子有一个值a[i,j] 现要求将其中的K个点(称为关键点)用格子连接起来,取(i,j)的费用就是a[i,j] 求K点全部连通的最小花费以及方案 n,m,k<=10 思路:斯坦纳树 虽然去年就疑似过了一道裸题,不过估计也是COPY的std,早就忘干净了 先%了一发论文,看到了几道有意思的SPFA的应用,准备去做一下 设dp[i,j,sta]为当前在(i,j),关键点联通情况为sta的最小花费 显然初始化 \[ dp[i,j,1<&l…
(1)集合中元素表示(1<<i), i从0开始 (2)注意dp[i][ss] = min(dp[i][ss], dp[i][rr | s[i]] + dp[i][(ss ^ rr) | s[i]]);,后面的要 |s[i],保证状态的正确 (3)INF初始化CLR(dp, 0x3f) (4)注意斯坦纳树状态理解,分层松弛的理解 参考:http://endlesscount.blog.163.com/blog/static/821197872012525113427573/ //#pragma…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3311 [题意] 给定k座庙,n个其他点,m条边,点权代表挖井费用,边权代表连边费用,问使得k座庙里的所有和尚都能吃到水的最小费用. [思路] 首先一个相连的块里只要有口井就能保证块里的和尚有水.所以这个题目标并不是要让k个点连通,但我们可以转化一下. 在原图的基础上我们添加0号结点,由0号结点向所有的点连边为该点的点权,代表挖井的费用,从而保证每个块里都有井,则问题转化为求以0为根包含k个点的斯…