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

一道很玄妙的题= = 我们考虑先考虑DP 那么有$f[x]=min(c+\sum f[y])$ $f[x]$表示覆盖x的子树和x->fa[x]的所有边最小代价 我们枚举一条边c覆盖的x->fa[x]并把它作为主链 f[y]就是除了主链以外的所有点的dp 接着考虑这个玩意怎么维护 我们可以在dp过程中直接把$\sum f[y]$放入$c$中 就变成了下面的这些操作 1.将终点在x的链删除. 2.记$sum=\sum f[y] y=son[x]$,son[i]子树内所有的链$c+=sum-f[so…
[CF671D]Roads in Yusland(贪心,左偏树) 题面 洛谷 CF 题解 无解的情况随便怎么搞搞提前处理掉. 通过严密(大雾)地推导后,发现问题可以转化成这个问题: 给定一棵树,每条边可以被标记若干次,有若干个限制,每次限制一条链上所有边被覆盖的总次数不能超过一个给定值,现在要最大化边被覆盖的总次数. 不难发现转化出来的问题可以贪心来做,即一条边在满足所有限制的情况下,选择其能够被覆盖的最多次数一定不会更差,所以只要能覆盖就覆盖. 那么拿左偏树进行堆的合并就可以很容易的从下往上维…
题目描述 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…
[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…
[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-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\) 为一个矩阵) 其理解可以参…
n<=300000个点的树,给m<=300000条带权路径(ui,vi,保证vi是ui的祖先)求覆盖整棵树每条边的最小权和. 好题好姿势!直观的看到可以树形DP,f[i]表示把点i包括它爸爸下面那条边都覆盖的最小权,就用经过他爸爸那条边的所有路径,各条路径加上一些子树信息来更新即可. 这样时间炸,那看看怎么优化.实际上我们不是在单纯地用一条路径更新答案,而是这样一个东西: 其中红色那条是题目给的路径,实际上是加上蓝色边连接的点的f[i]来更新边2上端的那个点的答案的.也就是说,一条路径来更新答…
传送门 洛谷翻译 CodeForces Solution emmm,先引入一个对偶问题的概念 \(max(c^Tx|Ax \leq b)=min(b^Ty|A^Ty \ge c)\) 考虑这个式子的现实意义: \(c\):每种成品的收益 \(x\):每种成品生产多少个 \(A\):生产每种成品所需要的原料数 \(b\):每种原料的总个数 \(y\):直接卖原料.每种原料的价格 然后考虑第一个式子就是成品的最大收益对吧. 现在我们不做成品了,搞原料去,显然不能够亏,不然不如搞成品. 所以我的最小收…