警告:初一生如果看不懂可能无法进队!@Grapher
Difficulty:7+ / Hard
Tag:动态标号
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OX=OY=0O_X=O_Y=0OX =OY =0
O(N2LOGN+QLOGN)O(N^2\LOG N+Q\LOG N)O(N2LOGN+QLOGN)
Difficulty:5.1 / Medium
直接枚举每一个根,对节点排序。
考虑动态标号,直接开个平衡树记录每个节点子树当前的排名,然后排序。可以轻松做到 O(n2log2n)O(n^2\log^2 n)O(n2log2n) 或 O(n2logn)O(n^2\log n)O(n2logn)。
O(NLOG2N+QLOGN)O(N\LOG^2 N+Q\LOG N)O(NLOG2N+QLOGN)
Difficulty:6.3 / Medium+
考虑如何换根。
注意到根换成子节点时,只有这个根和子节点的形状会变。所以真正不同的子树形状也只有 O(n)O(n)O(n) 个。
但是如果暴力加点的话是 O(∑deg2)O(\sum deg^2)O(∑deg2) 的,构造个菊花图就能卡掉。
我们注意到换根后,原来的根的子树形状为原来的减去新的根的子树。所以我们可以记录两种类型:
* 是由很多子树形状 SiS_iSi 拼成的。
* 是由子树形状 lstlstlst 减去 lstklst_klstk 后形成的。
这样做到了 O(n)O(n)O(n) 空间。但比较的时间还是不变。
其实很简单,考虑哈希二分比较即可。二分找到两颗子树形状第一个不同的点,然后比较这两个的形状就行了。显然一次比较还是 O(logn)O(\log n)O(logn) 的,所以此时总复杂度为 O(nlog2n+qlogn)O(n\log^2 n+q\log n)O(nlog2n+qlogn)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OX=0,OY=1O_X=0,O_Y=1OX =0,OY =1
Difficulty:6.3 / Medium+
注意到一个节点的形状一定严格小于它祖先的形状。这个显然吧。
所以加个二分即可 O(nlog2n+qlog2n)O(n\log^2 n+q\log^2 n)O(nlog2n+qlog2n)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OX=1,OY=0O_X=1,O_Y=0OX =1,OY =0
Difficulty:6.5 / Medium+
根据上面的结论,换根后原来的根一定是 ttt 的祖先节点,显然换根后排名也不会更高。
所以一样可以二分,只不过得用可持久化平衡树之类的维护。
O(nlog2n+qlog2n)O(n\log^2 n+q\log^2 n)O(nlog2n+qlog2n)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OX=OY=1O_X=O_Y=1OX =OY =1
我不会树分块啊。那咋办。
没事,反正又进不了队管那么多干嘛。