洛谷$P3647\ [APIO2014]$连珠线 换根$dp$
正解:换根$dp$
解题报告:
谁能想到$9102$年了$gql$居然还没写过换根$dp$呢,,,$/kel$
考虑固定了从哪个点开始之后,以这个点作为根,蓝线只可能是直上直下的,形如"父-子-孙"这样的.
所以先考虑一个$O(n^2)$的做法,就枚举根节点,然后跑个$dfs$,设$f_{i,1}$表示点$i$是蓝线上"子"的最大答案,$f_{i,0}$表示点$i$不是蓝线上"zi"的最大答案
然后对于$f_{i,0}$,它不是"子"有两种可能,要么就子节点是"子",就会是$f_{j,1}+w$,要么就连接的不是蓝线,此时$j$也不可能是"zi"了,就会是$f_{j,0}$
然后对于$f_{i,1}$.考虑枚举哪个子节点是"孙".其他儿子和$f_{i,0}$的转移是一样的,只有点$j$的贡献从$max\{f_{j,1}+w,f_{j,0}\}$成了$f_{j,0}+w$
所以转移就
$f_{i,0}=\sum max\{f_{j,1}+w,f_{j,0}\}$
$f_{i,1}=max\{f_{i,0}-max\{f_{j,1}+w,f_{j,0}\}+f_{j,0}+w\}$
发现复杂度很假,考虑优化.
发现如果移动根对大部分节点无影响,所以考虑换根$dp$.
现在考虑把某个节点的儿子变成了父亲有什么影响$QwQ$?
首先这个子节点的贡献没了,所以$max$可能会改变,所以要记录一个次大值.同时原来的父亲变成了儿子对当前父亲产生了贡献.
考虑在第一次$dp$的时候再记录一个$g_{i,j,0/1}$表示点$i$的子树中不考虑$j$的情况下的$f_{i,0/1}$.
$g_{i,j,0}$就直接减去$max\{f_{j,1}+w,f_{j,0}\}$就成.
然后$g_{i,j,1}$就顺便维护一个次大值,如果等于最大值就赋值为次大值,否则对最大值没有影响就依然赋值为最大值就好(同样要把$max\{f_{j,1}+w,f_{j,0}\}$的贡献删去鸭$QwQ$
洛谷$P3647\ [APIO2014]$连珠线 换根$dp$的更多相关文章
- 【BZOJ3677】[Apio2014]连珠线 换根DP
[BZOJ3677][Apio2014]连珠线 Description 在列奥纳多·达·芬奇时期,有一个流行的童年游戏,叫做“连珠线”.不出所料,玩这个游戏只需要珠子和线,珠子从1到礼编号,线分为红色 ...
- 洛谷 P3647 [APIO2014]连珠线(换根 dp)
题面传送门 题意: 桌子上有 \(1\) 个珠子,你要进行 \(n-1\) 次操作,每次操作有以下两种类型: 拿出一个新珠子,并选择一个桌子上的珠子,在它们之间连一条红线 选择两个由红线相连的珠子 \ ...
- [换根DP]luogu P3647 [APIO2014]连珠线
题面 https://www.luogu.com.cn/problem/P3647 不重复地取树中相邻的两条边,每次得分为两条边权和,问最大得分 分析 容易想到状态 f[i][0/1] 分别表示 i ...
- Luogu P3647 [APIO2014]连珠线
题目 换根dp. 显然对于给定的一棵有根树,蓝线都不能拐弯. 设\(f_{u,0}\)表示\(u\)不是蓝线中点时子树内的答案,\(f_{u,1}\)表示\(u\)是蓝线中点时子树内的答案.(以\(1 ...
- 并不对劲的bzoj3677:p3647:[APIO2014]连珠线
题目大意 有一种生成\(n\)个点的树的方法为: 一开始有一个点,\(n-1\)次操作,每次可以有两种操作:1.选一个点,用一条红边将它与新点连接:2.将新点放在一条红边上,新点与这条红边两端点直接的 ...
- 【LG3647】[APIO2014]连珠线
[LG3647][APIO2014]连珠线 题面 洛谷 题解 首先考虑一下蓝线连起来的情况,一定是儿子-父亲-另一个儿子或者是儿子-父亲-父亲的父亲. 而因为一开始只有一个点在当前局面上,将一条红边变 ...
- BZOJ 3677 连珠线
Description 在达芬奇时代,有一个流行的儿童游戏称为连珠线.当然,这个游戏是关于珠子和线的.线是红色或蓝色的,珠子被编号为\(1\)到\(n\).这个游戏从一个珠子开始,每次会用如下方式添加 ...
- [Bzoj3677][Apio2014]连珠线(树形dp)
3677: [Apio2014]连珠线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 434 Solved: 270[Submit][Status] ...
- 题解 [APIO2014]连珠线
题解 [APIO2014]连珠线 题面 解析 首先这连成的是一棵树啊. 并且\(yy\)一下,如果钦定一个根, 那么这上面的蓝线都是爸爸->儿子->孙子这样的,因为像下图这样的构造不出来: ...
随机推荐
- Flask学习之十一 邮件支持
英文博客地址:blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xi-email-support 中文翻译地址:http://www. ...
- oracle函数 TRANSLATE(c1,c2,c3)
[功能]将字符表达式值中,指定字符替换为新字符 [说明]多字节符(汉字.全角符等),按1个字符计算 [参数] c1 希望被替换的字符或变量 c2 查询原始的字符集 c3 替换新的字符集,将 ...
- 使用vux组件库常见报错($t)处理
错误一: [Vue warn]: Property or method "$t" is not defined on the instance but referenced dur ...
- 解决 VS 跳转定义和 Resharper 重复
在大约一周之前,Visual Studio 进行了一项更新,增加了 Ctrl+Click 点击跳转到定义的功能.这项功能与 ReSharper 重复了. 于是可以通过关闭其中一个跳转定义可以使用. V ...
- ELMo解读(论文 + PyTorch源码)
ELMo的概念也是很早就出了,应该是18年初的事情了.但我仍然是后知后觉,居然还是等BERT出来很久之后,才知道有这么个东西.这两天才仔细看了下论文和源码,在这里做一些记录,如果有不详实的地方,欢迎指 ...
- Linux查看用户及其权限管理
https://www.cnblogs.com/fxlttkl/p/7601224.html 查看用户 请打开终端,输入命令: $ who am i 或者 $ who mom likes 输出的第一列 ...
- JAVA总结---序列化的三种方式
序列化和反序列化 序列化:可以将对象转化成一个字节序列,便于存储. 反序列化:将序列化的字节序列还原 优点:可以实现对象的"持久性", 所谓持久性就是指对象的生命周期不取决于程序. ...
- 用adblock过滤页面上固定位置的悬浮窗
现在各种网站都喜欢加入position:fixed的悬浮窗,这些悬浮窗可以是分享按钮,可以是二维码,可以是各种烦人的按钮. 因为这些悬浮窗未必是广告,所以adblock很少自动屏蔽它们. 可这些悬浮窗 ...
- H3C使用ping命令--用户视图
完整的ping命令,用于下面参考 <H3C>ping 1.1.1.1 PING 1.1.1.1: 56 data bytes, press CTRL_C to break R ...
- javascript基础的一些总结
一 闭包 各种专业文献上的"闭包"(closure)定义非常抽象,很难看懂.我的理解是,闭包就是能够读取其他函数内部变量的函数. 由于在Javascript语言中,只有函数内部的子 ...