【SNOI2019】网络(我只会口胡不想实现)(长链剖分)(树形DP)

传送门


口胡题解:

我觉得来做这道题的同学有必要认识一下出题人lca,【十二省联考2019 希望】也是这位毒瘤神仙出的。。。那道题标程20K。。。

首先注意到答案最后选择的是一个包含 u u u且直径不超过 d d d的极大连通块。

注意到询问只有10个,而且没有修改,也就是说我们可以考虑处理出以每个点或每条边为连通块中心的答案,然后暴力枚举中心即可。

那么考虑怎么快速处理出每个点为中心的答案。

注意到这其实是一个和深度有关的限制,考虑长链剖分优化转移,我们需要维护深度不超过 0 − L 0-L 0L的点的个数,深度之和,两两之间的深度之和。东西太多感觉写起来有点麻烦

感觉上,这个东西显然是可以长链剖分优化的,但是你写过希望可能就会不太想写这个,然后如果限制直径是奇数就枚举边进行拼接,否则枚举点进行拼接。

然后询问每个点的时候直接dfs找到所有合法中心对答案取一个max就行了,预处理 O ( n ) O(n) O(n),回答询问 O ( n ) O(n) O(n)

当然如果询问太多的话并不清楚有什么优秀的做法,但是如果点数再少一点可以上点分树+数据结构,目前能想清楚的大概就是主席树,将所有点的答案排序,主席树按照深度为根标号,内部以答案的排名为下标,然后我们要询问的就是距离一个点不超过 d 2 \frac{d}{2} 2d的所有中心的答案最大值,预处理 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n),回答询问 O ( 1 ) O(1) O(1)

目前被LCA的标程吓到了不是很想写,等什么时候,(进队or退役)之后有空再补吧。。。

为什么LCA总是出一些实现不太友好的题啊

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值