题解-Codeforces671D Roads in Yusland】的更多相关文章

Problem Codeforces-671D 题意概要:给定一棵 \(n\) 点有根树与 \(m\) 条链,链有费用,保证链端点之间为祖先关系,问至少花费多少费用才能覆盖整棵树(\(n-1\) 条边) \(n,m\leq 3\times 10^5\) Solution 有一个线性规划的对偶式子(是从这篇里学习的): \(\max\{c^Tx|Ax\leq b\}=\min\{b^Ty|A^Ty\geq c\}\) (其中 \(x,y,b,c\) 为列向量,\(A\) 为一个矩阵) 其理解可以参…
[Codeforces671D]Roads in Yusland Tags:题解 题意 luogu 给定以1为根的一棵树,有\(m\)条直上直下的有代价的链,求选一些链把所有边覆盖的最小代价.若无解输出-1 \(n\le 3*10^5\) 题解 这题有一些DP做法,这里不再赘述了. 首先你得知道线性规划的对偶. 式子是这样的\(max\{c^Tx|Ax\le b\}=min\{b^Ty|A^Ty\ge c\}\) 强行往上面套(右式): \(c\)为全1列向量,长度为\(m\) \(y\)为01…
题目描述 Mayor of Yusland just won the lottery and decided to spent money on something good for town. For example, repair all the roads in the town. Yusland consists of n intersections connected by n - 1 bidirectional roads. One can travel from any inter…
[CF671D]Roads in Yusland(贪心,左偏树) 题面 洛谷 CF 题解 无解的情况随便怎么搞搞提前处理掉. 通过严密(大雾)地推导后,发现问题可以转化成这个问题: 给定一棵树,每条边可以被标记若干次,有若干个限制,每次限制一条链上所有边被覆盖的总次数不能超过一个给定值,现在要最大化边被覆盖的总次数. 不难发现转化出来的问题可以贪心来做,即一条边在满足所有限制的情况下,选择其能够被覆盖的最多次数一定不会更差,所以只要能覆盖就覆盖. 那么拿左偏树进行堆的合并就可以很容易的从下往上维…
[CF617D]Roads in Yusland 题面 蒯的洛谷的 题解 我们现在已经转化好了题目了,戳这里 那么我们考虑怎么求这个东西,我们先判断一下是否所有的边都能被覆盖,不行的话输出\(-1\). 再将路径\(u\rightarrow v(dep_u>dep_v)\)以其权值为关键字丢到以\(u\)为根的左偏树(小根)上, 再进行\(dfs\),合并\(x\)的所有儿子的左偏树,对于点\(x\),我们能选则选, 还有打标记等细节,详见代码. 代码 #include <iostream&g…
[题目]D. Roads in Yusland [题意]给定n个点的树,m条从下往上的链,每条链代价ci,求最少代价使得链覆盖所有边.n,m<=3*10^5,ci<=10^9,time=4s. [算法]树形DP+线段树||可并堆 [题解]从每条边都需要一条链来覆盖的角度出发,令f[i]表示覆盖子树 i 以及 i到fa[i]的边(i->fa[i])的最小代价,整个过程通过dfs从下往上做. 由于f[son[i]]已知,所以f[i]的转移实际上是考虑覆盖i->fa[i]的链,定义这条链…
Mayor of Yusland just won the lottery and decided to spent money on something good for town. For example, repair all the roads in the town. Yusland consists of n intersections connected by n - 1 bidirectional roads. One can travel from any intersecti…
Problem CodeForces-835F 题意:求基环树删去环上任意一边后直径最小值,直径定义为所有点对最近距离的最大值 Solution 首先明确删去环上一点是不会影响树内直径的,所以应当先把所有树的直径求出来,这是树形Dp可以解决的,同时建议使用树形Dp,可以一次性求出接下来要用到的数据 这是直径在树上的情况,接下来考虑直径从树开始,中途经过环,最后回到树的情况 我们先把每个点向树里头能走的最远距离(也就是带权深度)\(f[x]\)求出来,同时把环排成一行,放到栈里头\(st[1]\)…
洛谷 Codeforces 这是一个非正解,被正解暴踩,但它还是过了. 思路 首先很容易想到DP. 设\(dp_{x,i}\)表示\(x\)子树全部被覆盖,而且向上恰好延伸到\(dep=i\)的位置,的最小费用. 转移方程非常显然:每次把\(dp_x\)和\(dp_v\)合并时\(dp_{x,i}+=\min\{dp_v\},dp_{v,i}+=\min\{dp_x\}\),然后对应位置取\(\min\)即可. 显然这东西可以用线段树合并维护,就做完了. 然而这题卡空间,需要垃圾回收. 线段树合…
dp dp优化 dfs序 线段树 算是一个套路.可以处理在树上取链的问题.…