NOI2021模拟测试赛(六十)

题面

西克

\(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\)

posted @ 2022-10-31 08:15  ez_lcw  阅读(66)  评论(0)    收藏  举报