2017.3.9 Harry and Christmas tree 失败总结
来源:互联网 发布:机器码算注册码软件 编辑:程序博客网 时间:2024/05/16 09:52
这题乍一看很想树上莫队、也很像树形dp,也感觉要用树链剖分,树上差分
但又好像不大对——
莫队的话、单点查询就和暴力无异、、 树形dp状态冗杂。 链剖lca多个点不好差分、、
链剖+set好像会超时、
打了一个,但网上没有评测、、、
极限情况(一条链+所有m在最后一个点上 ..)应该是o(mn)的 10^10、、、数据不坑的话60分还是有的、
有空再想想吧、
恩,先分析一下题目,这个m的总数虽然很大,但颜色种类数是<=100000我们或许可以从种类数做处理。
而且我们可以注意到颜色输入时,顺序是无所谓的,或许我们可以离散化一下离线处理。
这样我们就可以求lca差分了 。 但如果是裸的lca的话,每一个颜色相同的点必须和其他颜色相同的点求lca,对于完全树,效率是满意的 10^7 ,但如果是极限情况,效率就变成了 10^10(和上面一样) 感觉差分判终点的lca应该有很多重复计算的地方。
诶,既然一种颜色重复的只算一次的话,为什么不打bool+树状数组?
而且 它每个点的颜色只会对它上面的节点造成影响,从某种程度上说这或许是单调的,或许我们在剖分之后扫的时候每个重链可以新建一个set记录一下,这样对于极限情况反而会更快,但这样的话效率取决于重链的个数及深度,要是很多重链来回跳的话效率会很低:
就像这样:
不稳定的果断弃;
好了,感觉所有的路都封死了,基本没有办法了
来看题解:
好吧,离正解很近了,但倒在门口了、、
其实第一点我完全想到了,但第二点我只想到第一句话、、
其实我在做的时候也想过为每对点找lca做优化,但实在没有想到dfs序,转而用链剖,但对于此题来说,链剖的lca、更新性质不如dfs序lca、更新性质。。
就是说dfs序相近的求出的lca一定是最小的lca、、
确实,,离线lca的本质就是区间缩得越小,lca越小、、
这样的话就可以o(nlog(n))求lca了
复杂度就降为了 5000000左右、很轻松的就能过了
总结:
知道了题目的特性剩下的最重要的就是选性质最契合的工具了,看来不能抓住一个看似不错的算法不放,有可能另一种做法更好、
而且思考要多角度,要相信正解是人可以想出来的
- 2017.3.9 Harry and Christmas tree 失败总结
- 【HDU】5156 Harry and Christmas tree 【lca】
- 【LCA】 HDOJ 5156 Harry and Christmas tree
- [BestCoder Round #25 1003]Harry and Christmas tree
- hdu5156 Harry and Christmas tree 离线树状数组,dfs序
- 【HDU5156】Harry and Christmas tree,两种离线的做法
- 【HDU】5157 Harry and magic string 【Palindromic Tree】
- HDU 5157 Harry and magic string 【Palindromic Tree】
- POJ3013:Big Christmas Tree
- POJ_3013_Big Christmas Tree
- 1125 pojBig Christmas Tree
- POJ3013 Big Christmas Tree
- Big Christmas Tree
- pku3013 Big Christmas Tree
- Big Christmas Tree POJ
- Poj 3013 Big Christmas Tree
- poj 3013 big christmas tree
- POJ - 3013 Big Christmas Tree
- 第一篇:介绍iOS连接外设的方式以及选择蓝牙4.0的原因
- 算法9:在一个循环有序的数组里查找一个数
- 【Leetcode】最小 subsetsum
- Online Caisno Malaysia iBET Live Casino Rebate 0.75% Unlimited(iBET Live Casino, Live Casino Rebate,
- Cocoapods搭建私有库
- 2017.3.9 Harry and Christmas tree 失败总结
- BZOJ3812 主旋律
- 游戏数值策划入门介绍
- C# 子线程调用主线程窗体的解决方法
- New Year Snowmen CodeForces
- this关键字用法
- Servlet学习了解
- Jquery ajax 不执行success
- bamtools安装