传送门
口胡题解:
我觉得来做这道题的同学有必要认识一下出题人lca,【十二省联考2019 希望】也是这位毒瘤神仙出的。。。那道题标程20K。。。
首先注意到答案最后选择的是一个包含 u u u且直径不超过 d d d的极大连通块。
注意到询问只有10个,而且没有修改,也就是说我们可以考虑处理出以每个点或每条边为连通块中心的答案,然后暴力枚举中心即可。
那么考虑怎么快速处理出每个点为中心的答案。
注意到这其实是一个和深度有关的限制,考虑长链剖分优化转移,我们需要维护深度不超过
0
−
L
0-L
0−L的点的个数,深度之和,两两之间的深度之和。东西太多感觉写起来有点麻烦
感觉上,这个东西显然是可以长链剖分优化的,但是你写过希望可能就会不太想写这个,然后如果限制直径是奇数就枚举边进行拼接,否则枚举点进行拼接。
然后询问每个点的时候直接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总是出一些实现不太友好的题啊