• 浅谈有限域在 OI 中的一些应用 (2023 国家集训队论文), 戚朗瑞.

  \(\textbf{Example 1.}\)

  给定一张有向图 \(G=(V,E)\), \(|V|=n\), \(|E|=m\). 要求找到一条最长的简单路径. 保证最长路径长度 \(k\ll n\).

  \(\textbf{Solution 1.}\)

  存在显然的 \(\mathcal O\left(\binom{n}{k}\operatorname{poly}(n)\right)\) 的算法, 但我们更希望找到一种 \(\mathcal O(T(k)\operatorname{poly}(n))\) 的算法. 不妨枚举路径长度 \(k\), 转化为判定性问题.

  构造多项式 这个算法策略大家或许已经很熟悉了: 钦定一个阈值 \(w\), 构造 \(\mathbb{GF}(2^w)\) 中的多项式, 使得 "存在长度为 \(k\) 的简单路径 \(\Leftrightarrow\) 多项式非 \(0\)" 的置信度足够高.

  首先, 我们给路径随机赋权. 设 \(X_{n\times n}\) 是一个在 \(\mathbb{GF}(2^w)\) 中随机生成的 \(n^2\) 个数组成的矩阵, 对于路径 \(P=(v_1,v_2,\cdots,v_k)\), 令其权值为 \(\prod_{i=1}^{k-1}X_{v_iv_{i+1}}\).

  当然, 接下来的难点在于剔除掉其中的非简单路径. 剔除的方法就需要利用域特征为 \(2\) 的性质: \(a+a=0\). 我们可以尝试使所有非简单路径对总和的贡献次数是偶数, 这样就能将它们的贡献剔除了. 同时, 利用环的性质, 若 \(P\) 有环, 就会有偶数种绕圈的方式, 也即将 \(P\) 中的边重排构成路径的方式是偶数.我们再随机生成一个矩阵 \(Y_{n\times k}\) 来描述这种构造. 对路径 \(P\), 我们将它的权值乘上

\[\sum_{\sigma\in S_k}\prod_{i=1}^kY_{v_i\sigma_i},
\]

其中 \(S_k\) 是全局 \(k\) 阶置换集合. 可以感受到, 当 \(v_i\) 两两不同时, 上式 "很大概率" 非 \(0\); 而当 \(v_i=v_j~(i\neq j)\) 时, 上式显然为 \(0\).

  最后, 我们就是要求出

\[P(X,Y)=\sum_{|P|=k}\prod_{i=1}^{k-1}X_{v_iv_{i+1}}\sum_{\sigma\in S_k}\prod_{i=1}^kY_{v_i\sigma_i}.
\]

构造过程到此为止, 接下来我们只需要计算这个结果就行.

  求解多项式 比较自然的想法: 对 \(\sigma\) 状压 DP. 令 \(f(u,S)\) 表示 \(v_{|S|}=u\) 且 \(\sigma\) 取过 \(S\) 中的值时, 上式的和. 转移枚举 \(u\) 的邻接点和 \(\sigma_{|S|+1}\) 的取值即可. 转移次数为 \(\mathcal O(2^kkm)\), 我们一般取 \(w\le\omega\) 更方便地使用位运算, 最终复杂度为 \(\mathcal O(2^kkmw)\).

  当然, 我们还能把 \(\mathcal O(2^kn)\) 的空间复杂度优化到线性. 利用容斥处理集合状态:

\[\begin{aligned}
\mathcal Y(P) &= \sum_{\sigma\in S_n}\prod_{i=1}^kY_{v_i\sigma_i}\\
&= \sum_{S\subseteq[1:k]}(-1)^{k-|S|}\prod_{i=1}^k\sum_{\sigma_i\in S}Y_{v_i\sigma_i}\\
&= \sum_{S\subseteq[1:k]}\prod_{i=1}^k\sum_{\sigma_i\in S}Y_{v_i\sigma_i}.
\end{aligned}
\]

这样 \(S\) 就能在外部枚举了.

  正确性分析 接下来的问题是考察算法正确性. 本质上, 我们构造出了以 \(x_{ij},y_{ij}\) 为变元的判别式 \(P(X,Y)\), 并考察是否有 \(P(X,Y)=0\). 当随机判断错误时, 我们相当于找到了一组 \(P(X,Y)\) 的根. 此时, 有 Schwartz-Zippel 引理:

  \(\textbf{Lemma (Schwartz-Zippel).}\) 若多项式 \(P\neq0\), 则 \(\Pr(P(r_1,r_2,\cdots,r_n)=0)\le d/|F|\), 其中 \(d=\deg P\), \(F\) 为系数域.

  \(\textbf{Proof.}\) 对 \(n\) 归纳. 当 \(n=1\) 时显然成立. 设 \(n=k\) 时成立, 现对 \(n=k+1\) 归纳:

  设 \(P\) 中 \(x_1\) 的最高次为 \(t\), 令 \(P=x_1^tQ(x_2,x_3,\cdots,x_{k+1})+R(x_1,x_2,\cdots,x_{k+1})\). 那么

\[\begin{aligned}
\Pr(P=0) &= \Pr(P=0\mid Q=0)\Pr(Q=0)+\Pr(P=0\mid Q\neq 0)\Pr(Q\neq 0)\\
&\le \Pr(Q=0)+\Pr(P=0\mid Q\neq 0)\\
&\le \Pr(Q=0)+\Pr(P(x_1{\color{red}{;}}~x_2,x_3,\cdots,x_{k+1})=0)\\
&\le (d-t)/|F|+t/|F|\\
&= d/|F|.
\end{aligned}
\]
$\square$

  运用引理, 该算法的正确率为 \(\frac{2k-1}{2^w}\), \(w\) 取一个不算大的值就能得到良好的效果.

  构造方案 钦定可行起点集合, 迭代 \(k\) 次算法即可. 复杂度不变.

  \(\textbf{Example 2.}\)

  给定一个无向图 \(G=(V,E)\), 点 \(u\) 有颜色 \(c_u\). 你需要选出一个点集 \(V_0\), 记其在 \(G\) 中的导出子图为 \(G_0\), 则其满足 \(G_0\) 连通且颜色 \(i\) 在 \(V_0\) 中的出现次数 \(\le m_i\). 保证 \(m=\sum_im_i\ll n=|V|\).

  \(\textbf{Solution 2.}\)

  如同上一题, 我们先把原问题转化为判定性问题. 枚举点集的大小 \(k\), 检查是否存在可行的导出子图.

  构造多项式 点集 \(V\) 合法有两个判断要素: 一是连通, 二是颜色出现次数满足限制. 我们的构造性算法更容易描述 "存在某种要素组合", 分别考虑对二者的描述:

  对于连通, 可以通过 "存在生成树" 来描述. 设 \(X_{n\times n}\) 是同上题的随机矩阵, 则对于枚举的有根生成树树边集合 \(E_T\), 其贡献

\[\prod_{\lang u,v\rang\in E_T}X_{uv}.
\]

  对于颜色出现次数限制, 可以通过 "存在一种对点集内结点编号的方法, 使得同色结点编号不同". 这里, 结点 \(u\) 的编号是 \([1,m_{c_u}]\) 内的整数. 而 "编号不同" 就可以使用上题的构造策略了. 我们生成 \(Y_{n\times m}\) 用于编号, \(Z_{m\times m}^{(i)}\) 用于对颜色 \(i\) 的重复编号进行抵消, 那么这部分的贡献为

\[\sum_{\varphi}\prod_{u\in V_T}Y_{u\varphi_u}\sum_{\sigma}\prod_{v\in V_T}Z_{\varphi_v\sigma_v}^{(i)}.
\]

其中 \(\varphi\) 枚举编号方法, \(\sigma\) 枚举对结点的编号排列.

  那么, 一颗固定有根树 \(T=(V_T,E_T)\) 的贡献为

\[\prod_{\lang u,v\rang\in E_T}X_{uv}\sum_{\varphi}\prod_{u\in V_T}Y_{u\varphi_u}\sum_{\sigma}\prod_{v\in V_T}Z^{(i)}_{\varphi_v\sigma_v}.
\]

  求解多项式 同上一题一样, 我们先枚举 \(\sigma\) 的实际值域 \(S\) 并固定. 接下来需要计算的是:

\[\prod_{\lang u,v\rang\in E_T}X_{uv}\prod_{u\in T}\left(\sum_{\varphi}Y_{u\varphi_u}\sum_{\sigma,\sigma_i\in S}Z^{(i)}_{\varphi_u\sigma_u}\right)=\prod_{\lang u,v\rang\in E_T}X_{uv}\prod_{u\in T}W_u.
\]

当然, 特征为 \(2\) 的有限域下, 我们并不需要用诸如状压的手段保证 \(T\) 中结点两两不同. 直接令 \(f(r,s)\) 表示以 \(r\) 为根, 大小为 \(s\) 的有根树的贡献和, 枚举 \(r\) 的一个孩子转移就行. 最终复杂度 \(\mathcal O(2^mm^2|E|w)\).

  正确性分析 和上面一样的嘛.

  构造方案 找到有答案的根 \(r\), 不断加入其邻接边直到出现答案, 此后将这条边的端点与根合并, 更新\(\{m\}\) 集合, 迭代即可. 复杂度不变.

Note - 速通 NPC?有限域算术!的更多相关文章

  1. 【资源分享】半条命2速通AHK脚本

    *----------------------------------------------[下载区]----------------------------------------------* ...

  2. Linux速通 随笔整理

    Linux速通 随笔整理 为了方便阅读,特整理了相关的学习笔记 零.大纲 一.系统安装 二.命令格式 三.文件管理 四.用户群组 五.文件处理 六.系统初始化及监控 七.硬盘初始化 八.网络原理

  3. (数据科学学习手札151)速通pandas2.0新版本干货内容

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,前两天pandas正式发布了其 ...

  4. [数据结构] 大纲 - Stan Zhang 数据结构速通教程

    * 注: 本文/本系列谢绝转载,如有转载,本人有权利追究相应责任. 2019年4月8日 P1.1 链表 Link:https://www.cnblogs.com/yosql473/p/10727471 ...

  5. Linux速通 大纲

    1.Linux操作系统安装及初始化配置(熟悉) 2.Linux操作系统目录组成结构及文件级增删改查操作(重点) 3.Linux操作系统用户.权限管理(重点) 4.开源软件及Linux下软件包的管理(重 ...

  6. Linux速通01 操作系统安装及简介

    操作系统 # a)操作系统的定义:操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间. # 操作系统分为 系统调用接口 和 系统内核 # b)操作系统内核的定义 ...

  7. Linux速通02 命令格式

    命令的格式 # 格式:命令 [选项][参数] * 命令:告诉 Linux操作系统执行什么 * 选项:说明命令运行的方式(可以改变命令的功能).以 "-"字符开始 * 参数:说明命令 ...

  8. Linux速通03 目录文件的浏览、管理和维护

    Linux文件系统的层次结构 # 树状结构:在Linux或Unix操作系统中,所有的文件和目录都被组织成一个以根节点开始的倒置的树状结构. # 目录的定义:目录相当于Windows中的文件夹,目录中存 ...

  9. Linux速通04 用户、群组、权限

    用户及passwd文件 # /etc/passwd文件的功能:存储所有用户的相关信息,实际上是存放用户信息的数据库(database) # 各个字段的含义: * 第一个字段(列)记录的是这个用户的名字 ...

  10. Linux速通05 文件处理与编辑

    使用 cat 命令进行文件的纵向合并 # 例:使用 cat 命令将 baby.age.baby.weight.baby.sex 这三个文件纵向合并为 baby文件 * cat baby.age bab ...

随机推荐

  1. http协议、web服务器-并发服务器1

    阅读目录: 1.http协议 2.Web静态服务器-1-显示固定的页面 3.Web静态服务器-2-显示需要的页面 4.Web静态服务器-3-多进程 5.Web静态服务器-4-多线程 一.HTTP协议简 ...

  2. Rest-Assured 学习笔记

    Rest-Assured 学习笔记 body { font-family: Arial, sans-serif } .container { } h1, h2, h3 { color: rgba(51 ...

  3. 研发LLM模型,如何用数值表示人类自然语言?

    上一篇:<人工智能--自然语言处理简介> 序言:人工智能大语言模型(LLM)如何理解人类的自然语言?这个过程的核心在于将文本转化为计算机能处理的数值形式,经过计算,最终达到对语言的理解.起 ...

  4. Failed to load resoure:the serve responded with a status of 405 (Method Not Allowed)

    在项目中 web.config 引入 iis 删除WEBDEV 配置结束后 重启服务器

  5. Air780E如何发送SMS?一文详解!

    ​ 今天一起来学习使用合宙低功耗4G模组Air780E发送SMS短消息: 一.SMS简介 SMS(短消息服务,ShortMessageService)功能主要用于在蜂窝网络中传输短消息. 在4G网络中 ...

  6. 离线快速LCA(最近公共祖先) Tarjan算法

    离线快速LCA(最近公共祖先) Tarjan算法 前言 对于 OIer 来说,LCA 一直是处理树上问题的好帮手,无论是倍增还是树剖都有着优秀的 \(\log n\) 的复杂度.不过由于我们(数据规模 ...

  7. typeScript 基础类型 (三)

    typeScript 的基础类型包含 Boolean.Number.String.null.undefined 以及 ES6 的  Symbol 和 ES10 的 BigInt. 下面介绍每种类型的使 ...

  8. bootstrap-fileinput使用手册

    一.准备 1.插件下载地址:https://github.com/kartik-v/bootstrap-fileinput/ 下载后的压缩包解压文件夹内容如下: js:插件核心js代码,引用filei ...

  9. WiFi流量劫持—— 浏览任意页面即可中毒!

    大家都知道公共场所的Wifi安全性很差,但并不清楚究竟有多差.大多以为只要不上QQ.不登陆网站账号就没事了,看看新闻小说什么的应该毫无关系. 的确如此,看看新闻网页没有涉及任何敏感的账号信息.即便是数 ...

  10. Python之pandas读取Excel

    #! -*- coding utf-8 -*- """ 模块功能:读取当前文件夹下的Source里的Excel文件,显示其相关信息 说明:默认把Excel的第一行当做列名 ...