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 生活在这里画上句号.结局对我而言虽然不够完美,但是无论怎样都是我人生道路 ...
随机推荐
- JavaScriptif while for switch流程控制 JS函数 内置对象
1,if else语句 2,if else if else语句 3,switch语句 4,for循环 5,while循环 6,三元运算 7,JS中的函数 8,JS中的匿名函数 9,JS中的立即执行函数 ...
- 他凌晨1:30给我开源的游戏加了UI|模拟龙生,挂机冒险
一.前言 新年就要到了,祝大家新的一年: 龙行龘龘, 前程朤朤! 白泽花了点时间,用 800 行 Go 代码写了一个控制台的小游戏:<模拟龙生>,在游戏中你将模拟一条新生的巨龙,开始无尽的 ...
- [转帖]Region is unavailable的排查总结
https://tidb.net/blog/07c99ed0#4%C2%A0%20%E4%B8%80%E4%BA%9B%E5%BB%BA%E8%AE%AE 1 region访问基本流程 tidb在访问 ...
- [转帖]数据库篇-MySql架构介绍
https://zhuanlan.zhihu.com/p/147161770 公众号-坚持原创,码字不易.加微信 : touzinv 关注分享,手有余香~ 本篇咱们也来聊聊mysql物理和逻辑架构,还 ...
- 解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
跨域问题是浏览器为了保护用户的信息安全,实施了同源策略(Same-Origin Policy),即只允许页面请求同源(相同协议.域名和端口)的资源,当 JavaScript 发起的请求跨越了同源策略, ...
- runc网络与systemd管理runc应用
1. 创建网络命名空间 ip netns add <ns> # ns是自定义网络空间名 # 例如: ip netns add haproxy # 创建一个给 haproxy使用的网络命名空 ...
- ElasticSearch集群灾难:别放弃,也许能再抢救一下 | 京东云技术团队
1 前言 Elasticsearch作为一个分布式搜索引擎,自身是高可用的:但也架不住一些特殊情况的发生,如: 集群超过半数的master节点丢失,ES的节点无法形成一个集群,进而导致集群不可用: ...
- Spring 应用合并之路(一):摸石头过河 | 京东云技术团队
公司在推进降本增效,在尝多种手段之后,发现应用太多,每个应用都做跨机房容灾部署,则最少需要 4 台机器(称为容器更合适).那么,将相近应用做一个合并,减少维护项目,提高机器利用率就是一个可选方案. 经 ...
- 01 vue子组件调用父组件中的方法
vue子组件,调用父组件中有三种方法哈!下面我们一起来讲解. 第一种使用 直接在子组件中通过this.$parent.父组件中的方法.来调用父组件的方法 第一种的缺点是不能够传递参数哈.它只能够调用方 ...
- windwos10任务栏居中
如下操作 新建一个文件夹如图 然后出现这个重右往左一直拖然后拉出来就行了如图 拖不动或者没有的把这个关了-锁定任务栏 文字如何隐藏? 在这个文字旁边右击关闭标题即可 然后锁定任务栏就OK了