Loading

近期总结mon.12

CF708 Student's Camp

题意:有一个 \((n+2)\times m\) 的网格,行的编号分别为 \(0...n+1\)。一共有 \(k\) 天,在每一天,对于网格第 \(i\) 行(\(1\le i\le n\)),该行如果有格子,则两端的格子都有 \(p\) 个概率消失。求过了 \(k\) 天后网格仍然连通的方案数,对 \(10^9+7\) 取模。\(1\le n,m\le 1.5\times 10^3,\space 1\le k\le 10^5\)


一种朴素的 dp 为设 \(f[i,l,r]\) 表示前 \(i\) 行连通,且第 \(i\) 行恰好保留 \([j,k]\) 的格子的概率。

转移:\(f[i,l,r]=p^{l-1+m-r}\times (1-p)^{k-(l-1+m-r)} \times {k\choose l-1}\times{k\choose m-r}\sum_{x,y} f[i-1,x,y]\)

发现 \(l,r\) 两边的信息处理其实是非常类似的,考虑减少状态。

\(f[i,r]\) 表示前 \(i\) 行连通且第 \(i\) 行右端点为 \(r\) 的概率。

转移可以考虑容斥

\[f[i,r]=\sum_{l=1}^r p^{l-1+m-r}\times (1-p)^{2k-(l-1+m-r)}\times {k\choose l-1}\times{k\choose m-r}\times (\sum_{j=l}^m f[i-1,j]-\sum_{j=1}^{m-r}f[i-1,j]) \]

右边括号里的意思是:在右端点 \(\ge r\) 的前提下,总方案数减去左端点 \(>r\) 的方案数。

\(g[i,j]=\sum_{x=1}^j f[i,x]\),则

\[f[i,r]=\sum_{l=1}^r p^{l-1+m-r}\times (1-p)^{2k-(l-1+m-r)}\times {k\choose l-1}\times{k\choose m-r}\times (g[i-1,m]-g[i-1,l-1]-g[i-1,m-r]) \]

把有关 \(r\) 的拆出来

\[f[i,r]=(g[i-1,m]-g[i-1,m-r])\times{k\choose m-r}\times p^{m-r}\times (1-p)^{k-m+r}\times\sum_{l=1}^r {k\choose l-1}\times p^{l-1}\times (1-p)^{k-l+1}-{k\choose m-r}\times p^{m-r}\times (1-p)^{k-m+r}\times\sum_{l=1}^r {k\choose l-1}\times p^{l-1}\times (1-p)^{k-l+1}\times g[i-1,l-1] \]

前缀和优化即可,时间复杂度 \(O(nm)\)


AGC023F 01 on Tree

题意:一棵有根树,每个点标有 \(0/1\) 。有一个空的序列,每次消去一个没有父亲的点,并将其对应的 \(0/1\) 加在序列末尾。求最终序列的逆序对数的最小值。


不难发现,选了 \(1\) 之后必然将他下面的所有 \(0\) 全选掉。考虑将所有的 \(0\) 与其祖先中距离最近的 \(1\) 合并,最终仍然形成一棵树。令新树中每个点的权值为其所包含的 \(0\) 的数量,不难发现,原问题等价于:每次选择一个没有父亲的点,设其为第 \(t\) 个选的点,其权值为 \(c\),则代价为 \(t\cdot c\)。求选完所有点的最小代价。

这是一个经典问题,普及一下。

从树上找出权值最大的点,不难发现选了他的父亲后必定直接选他。

考虑把该点与他的父亲合并,加下来思考合并后如何比较权值。

设合并前该点权值为 \(a\),父亲为 \(b\),合并后需要与 \(c\) 比较。

两种顺序

  • \(b+2a+3c\)

  • \(c+2b+3a\)

两者相减得 \(2c-(a+b)\),除以 \(2\)\(c-\frac{a+b}{2}\),我们只需要比较 \(c\)\(\frac{a+b}2\) 的大小即可。

进一步的,设我们需要比较的点分别由权值为 \(a_1,a_2,...,a_m\)\(b_1,b_2,...,b_k\) 合并而来,则

  • \(a_1+2a_2+...+ma_m+(m+1)b_1+(m+2)b_2+...+(m+k)b_k\)

  • \(b_1+2b_2+...+kb_k+(k+1)a_1+(k+2)a_2+...+(m+k)a_m\)

相减得 \(m(b_1+b_2+...+b_k)-k(a_1+a_2+...+a_m)\)

除以 \(m\cdot k\)\(\frac{b_1+b_2+...+b_k}k-\frac{a_1+a_2+...+a_m}m\)

于是只需要比较平均值即可。

至于如何计算答案,考虑对于每个点记录由多少个点合并而来,以及这些点的权值之和即可。


ARC105F Lights Out on Connected Graph

题意:一张 \(n\)\(m\) 边的简单无向连通图,选一个边集,使得所有点连通且是二分图的方案数。

\(1\le n\le 17,\space n-1\le m\le \frac{n(n-1)}2\)


考虑分成两个二分图点集,然后选边使得所有点连通,同一个点集内不存在边,最后再除以 \(2\)

\(g[S]\) 表示分成两个点集并选边的方案数,不要求连通。

\(f[S]\) 表示在 \(g[S]\) 的基础上连通的方案数。

\(g[S]\):枚举一个点集 \(T\),设 \(cnt_S\) 表示集合 \(S\) 内的方案数,则 \(g[S]=\sum_{T\in S} 2^{cnt_S-cnt_T-cnt_{S-T}}\)

\(f[S]\):容斥,用 \(g[S]\) 减去不联通的。枚举最小编号的点所属的连通块,则 \(f[S]=g[S]-\sum_{T\in S,\min_{x\in S}\{x\}\in T} g[T]f[S-T]\)

时间复杂度 \(O(3^n)\)

posted @ 2023-12-30 17:03  Sktn0089  阅读(28)  评论(0)    收藏  举报