LGV引理
LGV引理是用来统计DAG中固定若干起点和终点情况下的选择不相交链的方案数的。
同样用来优化计数问题,但是比Pólya定理友好多了,这也就是为什么它能够被直接糊到NOI考场上。
对于一张DAG,每条边有一个边权 \(\omega(e)\) ,我们记一条路径 \(P\) 的权值 \(\omega(P)=\prod\limits_{e\in P}\omega(e)\) ,我们再记点 \(u\) 到点 \(v\) 的所有路径的权值之和为 \(e(u,v)\) 。
设我们有一个起点集合 \(A={a_1,a_2\dots a_k}\) 和一个终点集合 \(B={b_1,b_2\dots b_k}\) ,满足 \(|A|=|B|\) ,我们设 \(P\) 为它的一个选择不相交链的方案,我们同时记 \(t(P)\) 表示将终点按对应起点下标对应得到的排列的逆序对数 。
铺垫了这么多,终于到了LGV引理的主题部分:
对于行列式 \(M=\begin{vmatrix}e(a_1,b_1)&e(a_1,b_2)&\dots&e(a_1,b_k)\\e(a_2,b_1)&e(a_2,b_2)&\dots&e(a_2,b_k)\\\vdots&\vdots&\ddots&\vdots\\e(a_k,b_1)&e(a_k,b_2)&\dots&e(a_k,b_k)\\\end{vmatrix}\) ,我们有 \(\det M=\sum\limits_{P}(-1)^{t(P)}\prod\limits_{P_i\in P}\omega(P_i)\) 。
也就是,我们可以通过求出行列式 \(M\) 的值,来统计不相交链的方案数。
这里给出一个感性的证明:
首先, \(M\) 必然是统计了所有选择 \(k\) 条链的方案(无论是否有相交),假设我们找到其中一种有相交的方案,找到它的一个相交的节点以及在这个点相交的两条链(我们假定已经将所有的节点和链按照一定顺序排序以保证一一对应):

假设我们将这两条链在这个点之后路径交换:

不难发现,这两种情况下的 \(\prod\limits_{P_i\in P}\omega(P_i)\) 是一样的,但 \(t(P)\) 因为交换了排列中的两个数的位置,奇偶性改变。
所以在 \(\det M\) 中,这两项刚好抵消,所以只会剩下不相交的了,也就是右式。
当所有的边权都取 \(1\) 的时候,就是对不相交链方案数的统计了。
例题时间:
P6657 【模板】LGV 引理
发现不相交链选择的情况只有 \(a_i\) 与 \(b_i\) 对应的情况,所以 \(\det M\) 即为答案。
考虑从 \(a_i\) 到 \(b_j\) 有多少种方案:\(e(a_i,b_j)=\begin{cases}\dbinom{n+b_j-a_i}{b_j-a_i}&b_j\geqslant a_i\\0&b_j<a_i\end{cases}\) 。
处理出来即可,最终复杂度为 \(O(n+m^3)\) 。
[NOI2021] 路径交点
考虑当交点数为 \(k\) 的时候, \(P\) 对应排列相对于排列 \(1,2\dots n_1\) 相当于进行了 \(k\) 次相邻两两交换,对答案的贡献和引理中一样,均为 \((-1)^k\) ,用DP维护从每个起点到每个终点的方案数,然后对行列式求值即可,最终复杂度为 \(O(\sum m+n^3)\leqslant O(n^3)\) 。
CF348D Turtles
两只乌龟路径分别为 \((1,2)\rightarrow(n-1,m)\) 和 \((2,1)\rightarrow(n,m-1)\) ,只有符合答案的情况能够做到两两不相交,设 \(S(x_1,y_1,x_2,y_2)\) 为 \((x_1,y_1)\rightarrow(x_2,y_2)\) 的方案数,答案就是 \(\begin{vmatrix}S(1,2,n-1,m)&S(1,2,n,m-1)\\S(2,1,n-1,m)&S(2,1,n,m-1)\end{vmatrix}=S(1,2,n-1,m)S(2,1,n,m-1)-S(1,2,n,m-1)S(2,1,n-1,m)\) ,DP出答案式中的四个值即可,最终复杂度为 \(O(nm)\) 。
[PA2021] Fiolki 2
发现我们需要判断的是一个类似于去 \(k\) 条不相交的链的东西,所以考虑使用 LGV 引理。
因为只需判断是否合法,但是 LGV 是在进行带符号求和,所以考虑对每一条边随机赋一个边权,有解的可以近似等价于行列式的值不为零。
我们记 \(ed_{u,v}\) 表示 DAG 上 \(u\) 到 \(v\) 所有路径上边权积的和(也就是 LGV 要的那个东西)。
但是不一定能够取满 \(k\) 个,记 \(1\dots k\) 号节点到某一个点 \(u,u=k+1\dots n\) 的 \(ed\) 值为一个 \(k\) 维向量 \(\alpha_u=(ed_{1,u},ed_{2,u}\dots ed_{k,u})\) 。
不难发现,\(f(l,r)\) 的值就等价于 \(\alpha_l,\alpha_{l+1}\dots \alpha_r\) 构成的线性基的大小。
考虑使用时间戳线性基维护即可。
LGV引理的更多相关文章
- 2021牛客暑期多校训练营9C-Cells【LGV引理,范德蒙德行列式】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11260/C 题目大意 一个平面上,\(n\)个起点\((0,a_i)\)分别对应终点\((i,0)\),每次 ...
- P7736-[NOI2021]路径交点【LGV引理】
正题 题目链接:https://www.luogu.com.cn/problem/P7736 题目大意 有\(k\)层的图,第\(i\)层有\(n_i\)个点,每层的点从上到下排列,层从左到右排列.再 ...
- LGV 引理小记
讲个笑话,NOI 之前某场模拟赛让我知道了这个神奇的科技,于是准备 NOI 之前学完,结果鸽着鸽着就鸽掉了,考 day1 之前一天本来准备花一天时间学的,然后我就开玩笑般地跟自己说,这么 trivia ...
- LGV 引理
(其实是贺的:https://www.luogu.com.cn/paste/whl2joo4) 目录 LGV 引理 不相交路径计数 例题 Luogu6657. [模板]LGV 引理 CF348D Tu ...
- LGV 引理——二维DAG上 n 点对不相交路径方案数
文章目录 引入 简介 定义 引理 证明 例题 释疑 扩展 引入 有这样一个问题: 甲和乙在一张网格图上,初始位置 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_ ...
- P6657-[模板]LGV 引理
正题 题目链接:https://www.luogu.com.cn/problem/P6657 题目大意 给出$n\times n$的棋盘,$m$个起点第$i$个为$(1,a_i)$,对应$m$个终点第 ...
- ZROI 暑期高端峰会 A班 Day1 组合计数
AGC036F Square Constriants 一定有 \(l_i<p_i\le r_i\). 考虑朴素容斥,枚举每个数是 \(\le l_i\) 还是 \(\le r_i\).对于 \( ...
- ACM模板_axiomofchoice
目录 语法 c++ java 动态规划 多重背包 最长不下降子序列 计算几何 向量(结构体) 平面集合基本操作 二维凸包 旋转卡壳 最大空矩形 | 扫描法 平面最近点对 | 分治 最小圆覆盖 | 随机 ...
- 【置顶】Trotyl's OI tree
\(\rm thx\):@\(\rm UntilMadow\) ! \(\color{Green}{\rm Pupil}\) :只会一点点 \(\color{blue}{\text{Expert}}\ ...
- NOI2021游记
NOI2021游记 前言 写于 2021.7.28,成绩榜刚出后几个小时.总分 345 拿到银牌 183 名. 我的高中 OI 生活在这里画上句号.结局对我而言虽然不够完美,但是无论怎样都是我人生道路 ...
随机推荐
- 【scikit-learn基础】--『回归模型评估』之误差分析
模型评估在统计学和机器学习中具有至关重要,它帮助我们主要目标是量化模型预测新数据的能力. 在这个数据充斥的时代,没有评估的模型就如同盲人摸象,可能带来误导和误判.模型评估不仅是一种方法,更是一种保障, ...
- 【 js 】 构造函数返回的注意事项
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Laravel - 改为国内镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ (阿里云) 或 composer ...
- Oceanbase部分参数学习与验证
Oceanbase部分参数学习与验证 字符集等参数查看 yum install obclient -y 然后使用客户端连接: obclient -h172.24.110.175 -P2881 -uro ...
- [转帖]TiDB 数据库的调度
https://docs.pingcap.com/zh/tidb/stable/tidb-scheduling#%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86 PD (Pla ...
- [转帖]TiFlash 简介
overview TiFlash 是 TiDB HTAP 形态的关键组件,它是 TiKV 的列存扩展,在提供了良好的隔离性的同时,也兼顾了强一致性.列存副本通过 Raft Learner 协议异步复制 ...
- [转帖]《Linux性能优化实战》笔记(一)—— 平均负载
最近在看极客时间的<Linux性能优化实战>课程,记录下学习内容. 一. 平均负载(Load Average) 1. 概念 我们都知道uptime命令的最后三列分别是过去 1 分钟.5 分 ...
- [转帖]skywalking配置nacos集群模式
版本: name version nacos 1.1.0 skywalking 6.2.0 elasticsearch 6.3.2 es集群管理工具 cerebro-0.8.3 https://git ...
- JRC Flink流作业调优指南
# 作者:京东物流 康琪 本文综合Apache Flink原理与京东实时计算平台(JRC)的背景,详细讲述了大规模Flink流作业的调优方法.通过阅读本文,读者可了解Flink流作业的通用调优措施,并 ...
- vue写组件时的命名规范
1组件命名驼峰 如myBread.vue(组件) 2引入时,接受同样是驼峰 import MyBread from "@/components/cuscom/myBread.vue" ...