【BZOJ4774】修路 [斯坦纳树]】的更多相关文章

修路 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 5 5 2 1 3 4 3 5 2 2 3 1 3 4 4 2 4 3 Sample Output 9 HINT Main idea 给定若干对点,选择若干边,询问满足每对点都连通的最小代价. Solution 发现 d 非常小,所以我们显然可以使用斯坦纳树来求解. 斯坦纳树是用来解决这种问题的:给定若干关键…
题目描述 村子间的小路年久失修,为了保障村子之间的往来,AAA君决定带领大家修路. 村子可以看做是一个边带权的无向图GGG, GGG 由 nnn 个点与 mmm 条边组成,图中的点从 1∼n1 \sim n1∼n 进行编号.现在请你选择图中的一些边,使得 ∀1≤i≤d\forall 1 \leq i \leq d∀1≤i≤d , iii 号点和 n−i+1n - i + 1n−i+1号点可以通过你选择出的那些边连通,并且你要最小化选出的所有边的权值和.请你告诉AAA君这个最小权值和. 输入格式…
[BZOJ4774]修路(动态规划,斯坦纳树) 题面 BZOJ 题解 先讲怎么求解最小斯坦纳树. 先明白什么是斯坦纳树. 斯坦纳树可以认为是最小生成树的一般情况.最小生成树是把所有给定点都要加入到联通块中.而斯坦纳树不一样,斯坦纳树只需要把指定点集中的所有点全部加入到联通块中,并且允许使用点集以外的点. 然而求解最小斯坦纳树是一个\(NP\)问题,所以只能状压解决. 设\(f[S][i]\)表示指定点的联通情况为\(S\),并且当且的斯坦纳树以\(i\)为根,\(i\)可以是图上任意一个点. 考…
[BZOJ4774]修路 Description 村子间的小路年久失修,为了保障村子之间的往来,法珞决定带领大家修路.对于边带权的无向图 G = (V, E),请选择一些边,使得1 <= i <= d, i号节点和 n - i + 1 号节点可以通过选中的边连通,最小化选中的所有边的权值和. Input 第一行两个整数 n, m,表示图的点数和边数.接下来的 m行,每行三个整数 ui, vi, wi,表示有一条 ui 与 vi 之间,权值为 wi 的无向边. 1 <= d <= 4…
斯坦纳树的基础应用 斯坦纳树有什么用 个人一点粗浅理解…… 最基本形式的斯坦纳树问题(以下简称母问题):给定图G和一个关键点集V.求在G中选取一个权值最小(这里权值可以有很多变式)的边集E使V中的点两两连通. 由于这个母问题只对关键点有限制.那么可以用状压dp的做法:$f[i][j]$表示对于$i$点而言,它已连通的关键点状态为$j$的最小代价. 那么$f[i][j]$就有两种转移方式:1.从$f[i][t]$转移而来:2.从$f[v][j]$转移而来. 注意到第一种转移就相当于枚举子集:第二种…
题意:见题面(我发现自己真是越来越懒了) 有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…
题目大意: 给定无向图,让前k个点都能到达后k个点(保护地)中的一个,而且前k个点每个需要占据后k个中的一个,相互不冲突 找到实现这个条件达到的选择边的最小总权值 这里很容易看出,最后选到的边不保证整个图是联通的 我们只要计算出每一个连通的最小情况,最后跑一遍dfs就能计算出答案了 那么用dp[i][j]表示 i 点为根得到联通状态为 j 的情况需要选到的边的最小总权值 这个用斯坦纳树的思想就可以做到的 对于每一个状态,都用spfa跑一遍得到最优解 dp[i][j] = min(dp[i][j]…
(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…
思路:虚拟一个0号节点,将每个点建一条到0号节点的边,权值为挖井需要的价值.并要保证0号节点同另外n个寺庙一样被选择即可. 然后就是求斯坦纳树了. #include<map> #include<set> #include<cmath> #include<queue> #include<cstdio> #include<vector> #include<string> #include<cstdlib> #inc…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3311 [题意] 给定k座庙,n个其他点,m条边,点权代表挖井费用,边权代表连边费用,问使得k座庙里的所有和尚都能吃到水的最小费用. [思路] 首先一个相连的块里只要有口井就能保证块里的和尚有水.所以这个题目标并不是要让k个点连通,但我们可以转化一下. 在原图的基础上我们添加0号结点,由0号结点向所有的点连边为该点的点权,代表挖井的费用,从而保证每个块里都有井,则问题转化为求以0为根包含k个点的斯…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4006 [题意] 给定n点m边的图,连接边(u,v)需要花费w,问满足使k个点中同颜色的点都连通的最小费用. [思路] 题目所求斯坦纳森林. 如果我们知道满足颜色集合S连通的最小值g[S],则有转移式: G[S]=min{ g[s] , G[S’]+G[S-S’] } 则G[(1<<C)-1]即答案,G[S]定义为使得颜色集合S中所有相同颜色的点都连通的最小值. 这里的g[S],其实…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2595 [题意] 给定N*M的长方形,选最少权值和的格子使得要求的K个点连通. [科普] “斯坦纳树”就是包含给定点的最小生成树. [思路] 那么本题就是求一棵斯坦纳树. 设f[i][j][S]表示在点(i,j)且与之相连的点的状态为S. 有两种转移: f[i][j][S]<-f[i][j][S’]+f[i][j][S-S’]-a[i][j],合并子集 f[i][j][S]<-f[i…
4006: [JLOI2015]管道连接 Time Limit: 30 Sec Memory Limit: 128 MB Description 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰. 该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m 对情报站 ui;vi 和费用 wi,表示情 报站 ui 和 vi 之间可以花费 wi 单位资源建立通道. 如果一个情报站经过若干个建立好的通道可以到达另外一个情报站,那么这两个情报站就 建立了通道连接.形式化地,若 ui…
传送门 题意:略 论文 <SPFA算法的优化及应用> http://www.cnblogs.com/lazycal/p/bzoj-2595.html 本题的核心就是求斯坦纳树: Steiner Tree: Given an undirected graph with non-negative edge weights and a subset of vertices, usually referred to as terminals, the Steiner tree problem in g…
BZOJ_2595_[Wc2008]游览计划_斯坦纳树 题意: 分析: 斯坦纳树裸题,有几个需要注意的地方 给出矩阵,不用自己建图,但枚举子集转移时会算两遍,需要减去当前点的权值 方案记录比较麻烦,两边的转移都需要记录,最后dfs找方案会比较容易理解 代码: #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> using namespace std; #de…
BZOJ_5180_[Baltic2016]Cities_ 斯坦纳树 题意: 给定n个点,m条双向边的图.其中有k个点是重要的.每条边都有一定的长度. 现在要你选定一些边来构成一个图,要使得k个重要的点相互连通,求边的长度和的最小值.   分析: 斯坦纳树裸题 dis[i][j]表示关键点连通状态为i,当前在点j的最小花费 有两个转移:内部枚举子集,外部spfa转移 这道题卡spfa,那我们用dij就好啦   代码: #include <stdio.h> #include <string…
BZOJ_4006_[JLOI2015]管道连接_斯坦纳树 题意: 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰. 该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m 对情报站 ui;vi 和费用 wi,表示情 报站 ui 和 vi 之间可以花费 wi 单位资源建立通道. 如果一个情报站经过若干个建立好的通道可以到达另外一个情报站,那么这两个情报站就 建立了通道连接.形式化地,若 ui 和 vi 建立了通道,那么它们建立了通道连接:若 ui 和 vi 均 与 ti…
题目大意 有一个网格(或者你可以认为这是一个图),每个点都有颜色 \(c_i\) 和点权 \(a_i\). 求最小的连通块,满足这个连通块内点的颜色数量 \(\geq k\).在满足点数最少的前提下,要求点权的中位数最少. \(n\leq 233,c_i\leq n,k\leq 5\) 题解 如果 \(c_i\) 很小,就可以直接用斯坦纳树做. 本题要求在满足点数最少的前提下,要求点权的中位数最少.那么可以二分中位数 \(s\),将 \(a_i\leq s\) 的点的权值设为 \(M-1\),\…
考虑颜色比较少的时候,第一问可以直接斯坦纳树 第二问考虑二分,每次把每格的权值给成1000+[a[i]>m],就是在个数最少的基础上尽量选小于等于m的 然而颜色太多不能直接做,但可以把每种颜色映射到5以内,这样的话,做一次的正确率就是作为答案的那5种颜色分别被映射到了1~5的概率,就是$\frac{5!}{5^5}=0.0384$,做233次正确率就有$99.989\%$了 #include<bits/stdc++.h> #include<tr1/unordered_map>…
题目描述 VRI(Voltron 机器人学会)的工程师建造了 n 个机器人.任意两个兼容的机 器人站在同一个格子时可以合并为一个复合机器人. 我们把机器人用 1 至 n 编号(n ≤ 9).如果两个机器人的编号是连续的,那 么它们是兼容的,可以合并成一个复合机器人.最初这 n 个机器人各自都只有唯 一的编号.而一个由两个或以上的机器人合并构成的复合机器人拥有两个编号, 分别是构成它的所有机器人中最小和最大的编号. 例如,2 号机器人只可以与 1 号或 3 号机器人合并.若 2 号机器人与 3 号…
斯坦纳树板子题. 考虑状压dp,设f[i][j][S]表示当前在点(i,j)考虑转移,其所在的联通块包含的关键点集(至少)为S的答案. 转移时首先枚举子集,有f[i][j][S]=min{f[i][j][x]+f[i][j][y]-a[i][j]} (x&y=0,x|y=S). 然后考虑从点(i,j)从哪拓展而来,有f[i][j][S]=min{f[x][y][S]}+a[i][j],其中(x,y)为(i,j)的相邻点,使用spfa转移. 这里第二种转移仅在相同关键点集下进行,因为由更小点集转移…
题目链接 Luogu 4294 (我做这道题的时候BZOJ全站的SPJ都炸了 提交秒WA 幸好有洛谷) 题解 这道题是[斯坦纳树]的经典例题.斯坦纳树是这样一类问题:带边权无向图上有几个(一般约10个)点是[关键点],要求选择一些边使这些点在同一个联通块内,同时要求所选的边的边权和最小. 怎么解决斯坦纳树问题?--其实,就是一种状压DP. \(dp[i][j]\)表示以i号节点为根,当前状态为j(j的二进制中已经与i连通的点对应位置为1). 这个"以i为根"是哪来的呢?其实i可以是联通…
题意 题目链接 分析 记 g(d,x,y) 表示从 (x,y) 出发,方向为 d 到达的点,这个可以通过记忆化搜索求出,注意如果转移成环(此时向这个方向走没有意义)要特判. 记 f(l,r,x,y) 表示 \([l,r]\) 的机器人同时位于 (x,y) 最少需要花费多少步,根据题意容易得到转移: \[\begin{cases}f(l,r,x,y)=\min\limits_{i=l}^{r-1}\{f(l,i,x,y)+f(i+1,r,x,y)\}\\f(l,r,x,y)=\min\limits…
题意 题目链接 分析 对于第一问,如果颜色数量比较少的话可以 \(\binom{cnt}{k}\) 枚举最终连通块中的 \(k\) 种颜色,然后利用斯坦纳树求解. 如果颜色比较多,考虑将所有的颜色重新随机赋值 \([0,k-1]\) 然后跑斯坦纳树.貌似还可以证明:最终的连通块中一定恰好只有 \(k\) 种颜色.那么只要最终答案中那 \(k\) 种颜色随机到的是不同的颜色,就可以跑出正确答案,成功的概率是 \(\frac{k!}{k^k}\) ,而且最优解还可能不唯一,所以做 100 次失败的概…
话说挺早就写过斯坦纳树了,不过当时没怎么总结,也不是很理解……现在来个小结吧~ 斯坦纳树就是包含给定点的最小生成树(个人理解权值应当为正). 一般来讲,给定点的数目应该很小吧...于是我们可以用状压DP来解决. 需要2个方程: f[st][i]表示连通性至少为st,且经过i点的最小距离 方程1.f[st][i] = Min{f[s][i] + f[st - s][i]}(s为st的子集) 方程2.f[st][i] = Min{f[st][j] + w(i,j)}(i,j之间有边相连) 这里大家可…
斯坦纳树是在一个图中选取某些特定点使其联通(可以选取额外的点),要求花费最小,最小生成树是斯坦纳树的一种特殊情况 我们用dp[i][j]来表示以i为根,和j状态是否和i联通,那么有 转移方程: dp[i][j]=min(dp[i][s]+dp[j-s]-a[i][j]) (表示有两个状态s和j-s都和i联通,我们把这两个状态联通起来,这样多算了一次a[i][j],减去即可) dp[i][j]=min(dp[i][j],dp[k][j]+a[i][k]) (如果i和k连着,那么,链接i和k,更新d…
这题一看显然是一个裸的斯坦纳树 我们用$f[i][j]$表示经过的路径中包含了状态$i$所表示的点,且连接了$j$号点的最短路径. 显然,$f[i][j]=min\{f[i$^$k][j]+f[k][j]\}$, 其中$i $&$ k = k$. 转移完毕后,跑一个最短路去更新一遍. 那么显然这题的时间复杂度是$O(2^k\times 最短路时间复杂度)$. 但是这题神TM卡SPFA.... 我后来改写了$dij$,再加了个避免重复更新的判断,才过了... #include<bits/std…
Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1171  Solved: 639[Submit][Status][Discuss] Description 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰. 该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m 对情报站 ui;vi 和费用 wi,表示情 报站 ui 和 vi 之间可以花费 wi 单位资源建立通道. 如果一个情报站经过若干个建立好的通道可以到达另外一个情报…
Time Limit: 10 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 2030  Solved: 986[Submit][Status][Discuss] Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为一个景点:否则表示控制该方块至少需要的志愿者数目. 相邻的整数用 (若干个) 空格隔开,行首行末也可能有多余的空格. Outpu…
传送门 Description 作为公司老板的你手下有N个员工,其中有M个特殊员工.现在,你有一个消息需要传递给你的特殊员工.因为你的公司业务非常紧张,所以你和员工之间以及员工之间传递消息会造成损失.因此,你希望只告诉一部分特殊员工,然后依靠员工之间传递消息,使得所有的特殊员工都能获得要传递的消息,同时使得损失最小.同时,你不关心要传递的消息是否经过了其它员工.求最小的损失. Constraint 补全右侧代码区中的int solve(int N, vector cost_e, vector e…