西克
把 \(x\to y\) 拆成 \(x\to lca\to y\),而 \(x\to lca\) 的部分很好搞,不予阐述。
关键是 \(y\to lca\) 的部分,我们考虑离线解决。从上往下走时,对每种颜色 \(c\) 维护一个点 \(rt_c\),表示当前对于 \(c\) 的询问。每当走到 \(x\) 时,就把 \(rt_{a_x}\) 的父亲指向 \(rt_{b_x}\),并且把 \(rt_{a_x}\) 设为一个新的点用于处理下面对 \(a_x\) 的询问。然后对于某个询问 \((x,y,lca)\)(假设 \(x\to lca\) 走出来是颜色 \(c\)),就在走到 \(lca\) 时记录一下当前的 \(rt_{c}\) 记为 \(qr\),然后走到 \(y\) 的时候询问一下 \(qr\) 的根所对应的颜色即可。
用可撤销并查集维护,时间复杂度 \(O((n+q)\log n)\)。
尼特
只讲下面这个 DP 式子的生成函数怎么维护:
\[f_{i,j}= \begin{cases} af_{i-1,j+1}+bf_{i-1,j}+cf_{i-1,j-1} & j>0\\ bf_{i-1,j}+(a+c)f_{i-1,j+1} & j=0 \end{cases} \]关键是 \(j=0\) 时的特殊处理。
一个很巧妙的方法是我们设 \(F_n(x)\) 为数列 \(\{f_{n,n},f_{n,n-1},\cdots,f_{n,1},f_{n,0},f_{n,0},f_{n,1},\cdots,f_{n,n-1},f_{n,n}\}\) 的生成函数,那么就有:
\[\begin{aligned} F_n(x)&=(a+bx+cx^2)F_{n-1}(x)\\ &=(a+bx+cx^2)^n \end{aligned} \]苯为
这种给图上的点染颜色、要求边的端点颜色不同的题目,一定要确定好染色的顺序。比如说这一题,先把环上的颜色染完,那么剩下的树形结构就可以从上往下递推,每个点可染的颜色都是 \(k-1\)。
标签:rt,颜色,询问,NOI2021,cdots,lca,六十,模拟 From: https://www.cnblogs.com/ez-lcw/p/16843029.html