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

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