2017.3.9 Harry and Christmas tree 失败总结

          这题乍一看很想树上莫队、也很像树形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左右、很轻松的就能过了


总结:

知道了题目的特性剩下的最重要的就是选性质最契合的工具了,看来不能抓住一个看似不错的算法不放,有可能另一种做法更好、

而且思考要多角度,要相信正解是人可以想出来的


        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值