Loading

模拟赛8.11 解题报告

T1. 数对(ABC206E Divide Both)

题意:求整数对 \(x,y\) 个数,满足:

  • \(L\le x,y\le R\)

  • \(\gcd(x,y)>1,\space \frac x{\gcd(x,y)}>1,\space \frac y{\gcd(x,y)}>1\)

\(1\le L\le R\le 10^6\)

直接做不可能,考虑容斥。

若已满足 \(L\le x,y\le R\),那么

  1. \(\gcd(x,y)>1\)

  2. \(\frac x{\gcd(x,y)}>1\)\(x\) 不是 \(y\) 的倍数

  3. \(y\) 不是 \(x\) 的倍数。

\(f(S)\) 为钦定不满足条件集合 \(S\) 的方案数,则 \(\text{Ans}=f(\varnothing)-f(\{1\})-f(\{2\})-f(\{3\})+f(\{1,2\})+f(\{1,3\})+f(\{2,3\})-f(\{1,2,3\})\)

当我们定义 \(f(S)\) 为选择的 \(x,y\) 满足 \(1<x<y\)\(S\) 中的条件的方案数时,\(f(\{1,2\})=f(\{1,3\})=f(\{2,3\})=f(\{1,2,3\})=0\),我们只需要在此条件下计算分别钦定不满足条件 \(1,2,3\) 时的方案数即可。

条件 \(2,3\) 很简单,考虑条件 \(1\)

\[\begin{aligned} f(\{1\}) &= \sum_{x=L}^R\sum_{y=L}^R[\gcd(x,y)=1] \\ &= \sum_{x=L}^R\sum_{y=x+1}^R\sum_{d|\gcd(x,y)}\mu(d) \\ &= \sum_{d=1}^R\mu(d)\sum_{x=\lceil \frac Ld\rceil}^{\lfloor \frac Rd\rceil}\sum_{y=x+1}^{\lfloor \frac Rd\rfloor}1 \\ &= \sum_{d=1}^R\mu(d)\frac{(\lfloor \frac Rd\rfloor-\lfloor \frac {L-1}d\rfloor)(\lfloor \frac Rd\rfloor-\lfloor \frac {L-1}d\rfloor-1)}2 \end{aligned} \]

然后就做完了,时间复杂度 \(O(R)\)

T2. 小偷与警察(P4334 [COI2007]Policija)

题意:给出一张无向连通图,\(q\) 次询问,每次判断删除一条边或一个点后 \(u,v\) 是否连通。

\(1\le n\le 10^5,\space 1\le m\le 5\times10^5,\space 1\le q\le 3\times10^5\)

删除一条边,先判断是否是割边,如果不是必定仍然连通,否则考虑边双缩点,然后判断该边是否是 \(u,v\) 的必经边。

删除一个点同理。

然后我们发现这样写堪比大模拟……

考虑圆方树,删除一个点的询问即为判断一个点是否在一条路径上。如何判断,可以使用 \(\text{LCA}\) 处理,但是原题太毒瘤,居然卡空间……

然后我们可以用树剖代替树上倍增。

现在的问题是如何判断删除一条边的情况,不难发现,当这条边是割边时,显然连接的两个点形成一个点双,于是用这个点双的方点判断就行了。

时间复杂度 \(O(n+q\log n)\)

T3. 无线网络(P5786 [CQOI2008]传感器网络)

题意:有 \(n\) 个点和一个根节点,你要把这些点建立一棵树。给出字符矩阵 \(C[i,j]\),若 \(C[i,j]=\text{'Y'}\) 表示 \(i\) 可以选择 \(j\) 作为父亲,若 \(B[i]=\text{'Y'}\) 表示 \(i\) 可以选择根节点作为父亲。最小化 \(\max\limits_{i=1}^n\{\deg (i)\}\)(不包括根节点),并给出方案 \(fa_1,fa_2,...,fa_n\),若有多种方案则选择字典序最小的方案输出。

构造出的方案跟树的形态没有一点关系,于是我们考虑分成左右各 \(n\) 个点,编号分别为 \(1...n\)\(n+1...2n\)。若一个点 \(i\) 可以选择 \(j\) 作为父亲,那么令点 \(i\) 向点 \(j\) 连一条容量为 \(1\) 的边。令源点 \(S\)\(1...n\) 连容量为 \(1\) 的边,\(n+1...2n\) 向汇点 \(T\) 连边。当一个点 \(i\) 可以直接向根节点连边时,我么直接令 \(i\)\(T\) 容量为 \(1\) 的边。

跑最大流,点 \(n+1...2n\)\(T\) 的边的最大流量的最小值即为答案。

如何找答案?尝试二分答案,设当前值为 \(\text{mid}\),那么 \(n+1...2n\)\(T\) 的边的容量设为 \(\text{mid}\),以是否满流判断合法性。

我们还需要找方案,因为是找字典序最小的方案,可以用试填法,遍历 \(i=1...n\),枚举 \(i\) 可能的父亲,然后跑最大流判断是否合法。

时间复杂度 \(O(可过)\)

T4. 游戏设计

题意:给出 \(n,k\)\(2n\) 个由 \(\{\text{A,B,C,D}\}\) 组成的字符串 \(x_{1...n},y_{1...n}\),你需要给每个由 \(\{\text{A,B,C,D}\}\) 组成的长度为 \(k\) 的字符串染一种颜色(共 \(4^k\) 个字符串)。一开始对手从这 \(4^k\) 个选择一个字符串,然后对手每次可以对当前字符串进行两种操作:

  • 交换一对相邻的字符。

  • 选择一个 \(i(1\le i\le n)\),选择一个等于 \(x_i\) 的子串,然后把这个子串改成 \(y_i\)

若对手永远不能操作出一对颜色相同的字符串(包括一开始选择的),请你构造出一种染色方案。因为输出量可达 \(4^{30}=2^{60}\) 个数,你只需要输出最少需要多少种颜色。\(1\le k\le 30,\space 1\le n\le 50\)

由第一个操作可知,字符串可以任意排列,这和字符串的内容的关系并不是很大,因此一个字符串可以表示为一个四元组 \((a,b,c,d)\),表示有 \(a\)\(\text{A}\)\(b\)\(\text{B}\)\(c\)\(\text{C}\)\(d\)\(\text{D}\)

由于 \(k\le30\),所以状态数不大,最多 \(C(30+3,3)=5456\) 个。对于每个 \(i(1\le i\le n)\),设 \(x_i\) 的状态为 \((a_1,b_1,c_1,d_1)\)\(y_i\) 的状态为 \((a_2,b_2,c_2,d_2)\),枚举状态 \((a,b,c,d)\) 满足 \(a\ge a_1,b\ge b_1,c\ge c_1,d\ge d_1\),然后把 \((a,b,c,d)\)\((a-a_1+a_2,b-b_1+b_2,c-c_1+c_2,d-d_1+d_2)\) 连有向边即可。

只需要求这张图的一条路径经过的最多点数即可,证明不难,此处略。

于是 \(\text{SCC}\) 缩点 + \(\text{DAG}\space \text{DP}\) 就做完了。

posted @ 2023-08-11 22:04  Lgx_Q  阅读(8)  评论(0编辑  收藏  举报