WC2023(授课与讨论2)

Hammer to Fall

定义\(f_{i,j}\)表示\([i,q]\)天中点\(j\)的答案,则\(f_{i,j}=\begin{cases}f_{i+1,j}&j\ne b_{i}\\\min_{(j,k)\in E}(f_{i+1,k}+w_{(j,k)})&j=b_{i}\end{cases}\)

注意到每次仅修改\(f_{i,b_{i}}\),并对度数分治即可

具体的,用set维护相邻度数\(\le K\)的点,并暴力枚举度数\(>K\)的点即可

\(K=\sqrt{\frac{m}{\log n}}\),时间复杂度为\(O(q\sqrt{m\log n})\)


Partial Virtual Trees

\(\subset\)容斥为\(\subseteq\),即需对\([1,n)\)求出答案

记以\(i\)为根的子树点集为\(S\),定义\(f_{i,j}\)表示满足\(T_{0}=S\)\(T_{j}=\empty\)​的虚树序列数,则

\[\begin{array}{ll}f_{i,j}&=\sum_{t=1}^{j}\left(\prod_{son\in i}f_{son,t}+\sum_{son\in i}(f_{son,j}-f_{son,t})\prod_{other\in i}f_{other,t}\right)\\&=\sum_{son\in i}(\sum_{t=1}^{j}\prod_{other}f_{other,t})f_{son,j}-(d-1)\sum_{t=1}^{j}\prod_{son\in i}f_{son,t}\end{array} \]

(枚举最小的\(t\)满足\(i\not\in T_{t},\)并对至多一个\(>t\)的子树分类讨论)

由于\(1\)一直存在,\(\forall son\in 1\)的子树间独立,即\(k\)时的答案为\(\prod_{son\in 1}f_{son,k}\)

将其中\(f_{son,j}\)相关的项提出后即可优化,时间复杂度为\(O(n^{2})\)


Defend City

参考这里


Flower's Land

考虑点分治,即钦定连通块包含根节点

在dfs序上dp,即\(f_{i,j}\)表示dfs序中前\(i\)个点选\(j\)个的最大点权,转移即\(f_{i,j}\rightarrow \begin{cases}f_{i+1,j+1}(+a_{i})\\f_{i+sz_{i},j}\end{cases}\)

注意到转移为DAG,包含\(k\)即钦定经过\((k,*)\),分别处理以其为起点/终点的最长路即可

由于点集\(<k\)时可以直接退出,时间复杂度为\(O(nk\log\frac{n}{k})\)


Counting Sequence

取最大的\(K\)满足\(\frac{K(K+1)}{2}\le n\),并对\(a_{1}\)分类讨论:

  • \(a_{1}\le K\),则\(\max a_{i}\le 2K\)

    定义\(f_{i,j}\)表示\(a_{1}=i\)且和为\(j\)的方案数,转移即\(f_{i,j}=\sum_{d\in \{1,-1\}}c^{[d=-1]}f_{i+d,j-(i+d)}\)

    其中\(i\)的一维具有单调性,且仅需存储最后\(2K\)行,空间复杂度为\(O(n)\)

  • \(a_{1}>K\),则\(m\le K\),即不需要考虑\(>0\)的限制,可以差分统计每个\(\pm 1\)的贡献

    定义\(g_{i,j}\)表示\(m=i,a_{1}=0\)且和为\(j\)的方案数,转移即\(g_{i,j}=\sum_{d\in \{1,-1\}}c^{[d=-1]}g_{i-1,j-d(i-1)}\)

时间复杂度为\(O(n\sqrt{n})\)


黑白点

引理:对于顺时针四个点\(abcd\)(颜色为黑黑白白),则\(a-d,b-c\)劣于\(a-c,b-d\)

结论:任取线段\(a-b\),记\(c,d\)\(a,b\)顺时针下一个同色点,则有线段\(c-d\)

(上述性质可以自行画图+分类讨论证明)

记线段两侧分别有\(b_{l},w_{l},b_{r},w_{r}\)个黑/白点,即有\(\min(b_{l},w_{r})+\min(b_{r},w_{l})\)个交点

注意到\(b_{l}+b_{r}=w_{l}+w_{r}\),原式即\(\frac{1}{2}\min(b_{l}+w_{l},b_{r}+w_{r})\),也即两侧点数

\(n\)个黑/白点位置分别为\(b_{i},w_{i}\),则答案即\(\max_{d}\sum dis(b_{i},w_{i+d})\)

分别统计\(b_{i}\)\(w_{i}\)\(d\)的贡献,至多分成四段差分即可,时间复杂度为\(O(n)\)


Tree Distance

考虑点分治,记\(S\)为当前点集\(,d_{x}\)\(x\)到重心的距离,则贡献即\(\min_{x,y\in S\cap [l,r]}(d_{x}+d_{y})\)

可以看作最小值+次小值,而前者必然是\(S\)中后者左/右侧第一个比其小的元素

换言之,仅需考虑\(\sum |S|\sim O(n\log n)\)个点对,做二维偏序即可,时间复杂度为\(O(n\log^{2}n+m\log n)\)


神隐

参考这里


Proposition Composition

\(S_{i}\)为覆盖\((i,i+1)\)的非链边,则有以下情况:

  • 删除某条\(S_{i}=\empty\)\((i,i+1)\)(和其他任意一条边)
  • 删除\((i,i+1)\)\(S_{i}\)中的边(要求\(|S_{i}|=1\)
  • 删除\(i\ne j\)\(S_{i}=S_{j}\)\((i,i+1)\)\((j,j+1)\)

前两种情况是简单的(注意去重),下面考虑第\(3\)种情况:

对每个位置维护\(pre_{i}\)\(nex_{i}\),表示向前/向后第一个满足\(S_{i}=S_{j}\)\(j\)

此时,操作即将\(\forall i\in [l,r],pre_{i}<l\)\(nex_{i}>r\)处断开并连接若干\(pre_{i}\)\(nex_{j}\)

  • 关于断开,注意到总次数为\(O(n)\),用线段树维护即可

  • 关于连接,给每条链一个编号,并将断开的位置按编号排序即可

    求点所在链的编号可以用启发式分裂,即将较小的部分重新编号

时间复杂度为\(O(n\log n)\)


Anti-median

参考这里


和平共处

参考这里


Good Game

显然操作等价于每次删除极长且长度\(>1\)\(01\)

将所有极长段取出,并按长度是否\(>1\)转换为新的\(01\)

每次删除一个\(1\),相邻两数合并后必然为\(1\),注意到这可以看作删除这两数

换言之,每次删除某个\(1\)(除两端外)的相邻两数,使序列全为\(1\)

  • \(n=2k-1\),记\(x,y\)\([1,k]\)\([k,n]\)中最靠近\(k\)的两个\(1\)(不存在则为\(1\)\(n\)

    注意到至多操作\(k-1\)次,且每次删除\((x,y)\)中的\(0\)均需删除\([x,y]\)外的一个数,化简得\(y-x<k\)

    在此基础上,对\(y\)操作\(k-x\)次,即可使\(x\)在中间,进而对其操作剩余\(x-1\)次即可

  • \(n=2k\),考虑最后剩下的两个\(1\),显然所影响范围不交

    换言之,合法当且仅当能将整个序列分为两个长度为奇数的合法段,显然容易判定

时间复杂度为\(O(n)\)

posted @ 2023-01-27 12:14  PYWBKTDA  阅读(78)  评论(0编辑  收藏  举报