P4383 [八省联考 2018] 林克卡特树】的更多相关文章

LINK:林克卡特树 作为树形dp 这道题已经属于不容易的级别了. 套上了Wqs二分 (反而更简单了 大雾 容易想到还是对树进行联通情况的dp 然后最后结果总和为各个联通块内的直径. \(f_{i,j}\)表示以i为根的子树内有j条边被删掉 可以发现这个状态难以转移. 需要换个状态 一个比较经典的做法是套用树的直径的那套来做 每个点向上传递单条链或者什么都不传来转移. 传递单条链可以在父亲的那个地方合成一条 然后钦定此条为以x为根的联通内的最大值 那么就可以从x所在父亲的那条边切断了. 或者 传…
题目描述 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一个叫做“LCT” 的挑战,它的规则是这样子的:现在有一个N 个点的 树(Tree),每条边有一个整数边权vi ,若vi >= 0,表示走这条边会获得vi 的收益:若vi < 0 ,则表示走这条边需要支付- vi 的过路费.小L 需要控制主角Link 切掉(Cut)树上的 恰好K 条边,然后再连接 K 条边权为 0 的边…
题目链接 题意分析 一句话题意就是 : 让你选出\((k+1)\)条不相交的链 使得这些链的边权总和最大 (这些链可以是点) 我们考虑使用树形\(DP\) \(dp[i][j][0/1/2]\)表示以\(i\)为根的子树选出\(j\)条链 并且\(j\)的度数是\(0/1/2\)的最大总和 那么我们使用树上背包进行转移 \[dp[u][j][0]=dp[u][j-p][0]+dp[v][p][0]\] \[dp[u][j][1]=max(dp[u][j-p][1]+dp[v][p][0],dp[…
$ \color{#0066ff}{ 题目描述 }$ 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一个叫做"LCT" 的挑战,它的规则是这样子的:现在有一个N 个点的 树(Tree),每条边有一个整数边权vi ,若vi >= 0,表示走这条边会获得vi 的收益:若vi < 0 ,则表示走这条边需要支付- vi 的过路费.小L 需要控制主角Link 切掉(…
LuoguP4383 [八省联考2018]林克卡特树lct https://www.luogu.org/problemnew/show/P4383 分析: 题意等价于选择\(K\)条点不相交的链,使得总路径长度和最大. 设\(f[x][i][0/1/2]\)表示\(x\)子树中选了\(i\)个,\(x\)的当前度数为\(0/1/2\)的答案. 然后我们感性理解一下可知,选\(k\)个点的方案,一定能够从\(k-1\)个点的方案中转移过来的,不会出现从\(k-i(i>1)\)上再选若干个不在\(k…
[八省联考2018]林克卡特树lct 一看这种题就不是lct... 除了直径好拿分,别的都难做. 所以必须转化 突破口在于:连“0”边 对于k=0,我们求直径 k=1,对于(p,q)一定是从p出发,走一段原树,走0(或不走),再走一段原树,所以要最大化原树的值的和. 选择最大两条 点不相交的链(注意:可以选择一个点,这时候链长为0).然后一定可以首尾连起来得到答案 k更大的时候,选择最大的k+1条两两不相交的路径,然后一定存在方案使之连接起来,一定是最优解.(因为如果实际上最优解不用走k条0边,…
luoguP4383 [八省联考2018]林克卡特树(树上dp,wqs二分) Luogu 题解时间 $ k $ 条边权为 $ 0 $ 的边. 是的,边权为零. 转化成选正好 $ k+1 $ 条链. $ k \le 100 $ 的部分. 毫无疑问是树上打背包dp. 但具体设计还要注意一下. 一个问题是单点成链,这个要特判. 之后由于选择的都是链,所以每个点的度数不会超过2. 这样方程就出来了. $ k \le n $ 的部分. 很明显不能背包了. 但"选正好k个求最大权值和"这个要求如果…
题目:https://www.luogu.org/problemnew/show/P4383 关于带权二分:https://www.cnblogs.com/flashhu/p/9480669.html 自己只能想到 “如果把负边看作不存在,那么分出的连通块的直径一定可以被整个连进最终路径里”.然后就不知道连通块不是恰好 K+1 个怎么办,且也不知道是不是对的…… 原来可以直接把问题看成 “选出恰好 K+1 条不相交路径” .这样也考虑到了 “恰好 K 条” 的限制,并且好像挺对的. 结果自己还是…
题解: zhcs的那个题基本上就是抄这个题的,不过背包的分数变成了70分.. 不过得分开来写..因为两个数组不能同时满足 背包的话就是 $f[i][j][0/1]$表示考虑i子树,取j条链,能不能向上扩展的最大值 然后辅助数组$g[i][j][0/1/2/3]$表示考虑i子树,不取根,取根,取根连一条向下链,取根连两条向下链 然后代码非常好写(边界情况注意一下就可以了) 另外这个的时间复杂度$nk$分析是个比较套路的东西 我们转移的时候需要给j这一维$min$一个子树大小,不然就是$n*k^2$…
假设已经linkcut完了树,答案显然是树的直径.那么考虑这条直径在原树中是怎样的.容易想到其是由原树中恰好k+1条点不相交的链(包括单个点)拼接而成的.因为这样的链显然可以通过linkcut拼接起来,而若选择不超过k条链则可能有链不得不被cut拆开,即使不会被拆开也可以通过选择单点来达到恰好k+1条(下设k=k+1). 那么问题变为在树上选择k条点不相交的链使边权和最大.最简单的dp就是设f[i][j]为i子树中选j条链的最大权值,且用一维012状态记录i这个点在子树中的度数,转移类似于一个树…
题目链接 \(Description\) 给定一棵边带权的树.求删掉K条边.再连上K条权为0的边后,新树的最大直径. \(n,K\leq3\times10^5\). \(Solution\) 题目可以转化为,求树上不相交的\(k+1\)条链,使得它们的边权和最大(已不想再说什么了..). 选择链数越多,答案增长得越慢,减少的时候还会减少得越快,即形成了一个\(K-Ans_K\)的上凸包:而如果没有链数的限制,DP是很容易的(有链数得加一维\(k\)). 带权二分.DP用\(f[x][0/1/2]…
bzoj(上面可以下数据) luogu description 在树上选出\(k\)条点不相交的链,求最大权值. 一个点也算是一条退化的链,其权值为\(0\). sol 别问我为什么现在才写这题 首先可以有一个很显然的\(O(nk)\)的\(dp\). 设\(f_{i,j,0/1/2}\)表示\(i\)为根的子树中选出了\(j\)条链,此时\(i\)点的度数为\(0/1/2\)的最大权值. 然后你会发现这种选\(k\)个东西最大化收益/最小化代价的函数都会是凸的. 然后就凸优化一下? 然后就做完…
link 题目大意:给定你 n 个点的一棵树 (边有边权,边权有正负) 你需要移除 k 条边,并连接 k 条权值为 0 的边,使得连接之后树的直径最大 题解: 根据 [POI2015]MOD 那道题,显然我们应该找 k+1 条树上不相交的链,求这些链的长度之和最大值 k = 0 部分分:直接求树的直径 k = 1 部分分:把 MOD 那道题 或者点头网那个第一题粘过来就行了 k <= 100 部分分:我们也考虑树形dp 由于我们只需要把长度累加,我们考虑设 f[i][j][0/1/2] 代表以…
传送门 题目操作有点奇怪,不过可以发现这就是把树先变成\(k+1\)个连通块,然后每个连通块选一条路径(本题中一个点也是一条路径),然后依次接起来.所以实际上要求的是选出\(k+1\)条点不相交的路径的最大权值和.可以先考虑暴力,设\(f_{i,j,0/1/2}\)表示第\(i\)个点的子树中,选了\(j\)条路径,点\(i\)当前和\(0/1/2\)个点有连边,转移可以参考代码 然后能发现这个答案随着\(k\)的增长是一个上凸函数,所以可以凸优化dp,即二分选一条路径的代价,然后dp就没有\(…
qwq 安利一个凸优化讲的比较好的博客 https://www.cnblogs.com/Gloid/p/9433783.html 但是他的暴力部分略微有点问题 qwq 我还是详细的讲一下这个题+这个知识点吧. 还是先从题目入手. 首先我们分析题目. 因为题目要删除\(k\)条边,然后再新建\(k\)条边,求两点的路径和. 那我们不妨这么考虑,对于新连接一条边,相当于链接了原树上的两条链,且链不存在交点. 那我们新建\(k\)条边,就相当于把原树上没有交的\(k+1\)条链连接起来. 既然要求权值…
[BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树 题意 给定一个 \(n\) 个点边带权的无根树, 要求切断其中恰好 \(k\) 条边再连 \(k\) 条边权为 \(0\) 的边重新连成一棵树, 最大化新树上某条路径的权值和. \(0\le k<n\le 3\times 10^5\). 边权的绝对值不超过 \(1\times 10^6\). 提示: 题目并不难 题解 当时场上做这题的时候根本不知道有wqs二分这种高端套路...看到提示之后果断跑路了qaq... 首先切断…
对于k=0和k=1的点,可以直接求树的直径. 然后对于60分,有一个重要的转化:就是求在树中找出k+1条点不相交的链后的最大连续边权和. 这个DP就好.$O(nk^2)$ 然后我们完全不可以想到,将best[k](选择k条链的答案)打表输出,更不可能然后作差分,发现得到的数组是递减的. 这说明:best[k]是一个上凸包. 于是我们可以二分一个斜率去切这个凸包(类似导数),根据切点横坐标与k的大小旋转直线(改变斜率). 考虑给你一个直线斜率k,怎么找到它和凸包的切点.实际上就相当于将这个凸函数减…
[BZOJ5251][八省联考2018]劈配(网络流,二分答案) 题面 洛谷 BZOJ Description 一年一度的综艺节目<中国新代码>又开始了. Zayid从小就梦想成为一名程序员,他觉得这是一个展示自己的舞台,于是他毫不犹豫地报名了. 题目描述 轻车熟路的Zayid顺利地通过了海选,接下来的环节是导师盲选,这一阶段的规则是这样的: 总共n名参赛选手(编号从1至n)每人写出一份代码并介绍自己的梦想.接着由所有导师对这些选手进行排名. 为了避免后续的麻烦,规定不存在排名并列的情况. 同…
Description 一年一度的综艺节目<中国新代码>又开始了.Zayid 从小就梦想成为一名程序员,他觉得这是一个展示自己的舞台,于是他毫不犹豫地报名了. Input 轻车熟路的Zayid 顺利地通过了海选,接下来的环节是导师盲选,这一阶段的规则是这样的: 总共n 名参赛选手(编号从1 至n)每人写出一份代码并介绍自己的梦想.接着 由所有导师对这些选手进行排名.为了避免后续的麻烦,规定不存在排名并列的情况. 同时,每名选手都将独立地填写一份志愿表,来对总共 m 位导师(编号从 1 至 m)…
BZOJ 洛谷 对于每个人,每次枚举一个志愿看是否能增广即可. 对于第二问,可以保留第一问中\(n\)次增广前后的\(n\)张图,二分,在对应图上看是否能增广即可. 貌似匈牙利的某种写法比网络流优多了...懒得看... 写的常数莫名大... 增广失败的话原图流量不会变啊,不用特意删掉新加的边,把表头head改了即可,而且判断是否能增广只需要判断BFS()是否返回1. Dinic: //195228kb 6676ms #include <cstdio> #include <cctype&g…