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引理的更多相关文章

  1. 2021牛客暑期多校训练营9C-Cells【LGV引理,范德蒙德行列式】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11260/C 题目大意 一个平面上,\(n\)个起点\((0,a_i)\)分别对应终点\((i,0)\),每次 ...

  2. P7736-[NOI2021]路径交点【LGV引理】

    正题 题目链接:https://www.luogu.com.cn/problem/P7736 题目大意 有\(k\)层的图,第\(i\)层有\(n_i\)个点,每层的点从上到下排列,层从左到右排列.再 ...

  3. LGV 引理小记

    讲个笑话,NOI 之前某场模拟赛让我知道了这个神奇的科技,于是准备 NOI 之前学完,结果鸽着鸽着就鸽掉了,考 day1 之前一天本来准备花一天时间学的,然后我就开玩笑般地跟自己说,这么 trivia ...

  4. LGV 引理

    (其实是贺的:https://www.luogu.com.cn/paste/whl2joo4) 目录 LGV 引理 不相交路径计数 例题 Luogu6657. [模板]LGV 引理 CF348D Tu ...

  5. LGV 引理——二维DAG上 n 点对不相交路径方案数

    文章目录 引入 简介 定义 引理 证明 例题 释疑 扩展 引入 有这样一个问题: 甲和乙在一张网格图上,初始位置 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_ ...

  6. P6657-[模板]LGV 引理

    正题 题目链接:https://www.luogu.com.cn/problem/P6657 题目大意 给出$n\times n$的棋盘,$m$个起点第$i$个为$(1,a_i)$,对应$m$个终点第 ...

  7. ZROI 暑期高端峰会 A班 Day1 组合计数

    AGC036F Square Constriants 一定有 \(l_i<p_i\le r_i\). 考虑朴素容斥,枚举每个数是 \(\le l_i\) 还是 \(\le r_i\).对于 \( ...

  8. ACM模板_axiomofchoice

    目录 语法 c++ java 动态规划 多重背包 最长不下降子序列 计算几何 向量(结构体) 平面集合基本操作 二维凸包 旋转卡壳 最大空矩形 | 扫描法 平面最近点对 | 分治 最小圆覆盖 | 随机 ...

  9. 【置顶】Trotyl's OI tree

    \(\rm thx\):@\(\rm UntilMadow\) ! \(\color{Green}{\rm Pupil}\) :只会一点点 \(\color{blue}{\text{Expert}}\ ...

  10. NOI2021游记

    NOI2021游记 前言 写于 2021.7.28,成绩榜刚出后几个小时.总分 345 拿到银牌 183 名. 我的高中 OI 生活在这里画上句号.结局对我而言虽然不够完美,但是无论怎样都是我人生道路 ...

随机推荐

  1. 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中的立即执行函数 ...

  2. 他凌晨1:30给我开源的游戏加了UI|模拟龙生,挂机冒险

    一.前言 新年就要到了,祝大家新的一年: 龙行龘龘, 前程朤朤! 白泽花了点时间,用 800 行 Go 代码写了一个控制台的小游戏:<模拟龙生>,在游戏中你将模拟一条新生的巨龙,开始无尽的 ...

  3. [转帖]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在访问 ...

  4. [转帖]数据库篇-MySql架构介绍

    https://zhuanlan.zhihu.com/p/147161770 公众号-坚持原创,码字不易.加微信 : touzinv 关注分享,手有余香~ 本篇咱们也来聊聊mysql物理和逻辑架构,还 ...

  5. 解决跨域问题的8种方法,含网关、Nginx和SpringBoot~

    跨域问题是浏览器为了保护用户的信息安全,实施了同源策略(Same-Origin Policy),即只允许页面请求同源(相同协议.域名和端口)的资源,当 JavaScript 发起的请求跨越了同源策略, ...

  6. runc网络与systemd管理runc应用

    1. 创建网络命名空间 ip netns add <ns> # ns是自定义网络空间名 # 例如: ip netns add haproxy # 创建一个给 haproxy使用的网络命名空 ...

  7. ElasticSearch集群灾难:别放弃,也许能再抢救一下 | 京东云技术团队

    ​ 1 前言 Elasticsearch作为一个分布式搜索引擎,自身是高可用的:但也架不住一些特殊情况的发生,如: 集群超过半数的master节点丢失,ES的节点无法形成一个集群,进而导致集群不可用: ...

  8. Spring 应用合并之路(一):摸石头过河 | 京东云技术团队

    公司在推进降本增效,在尝多种手段之后,发现应用太多,每个应用都做跨机房容灾部署,则最少需要 4 台机器(称为容器更合适).那么,将相近应用做一个合并,减少维护项目,提高机器利用率就是一个可选方案. 经 ...

  9. 01 vue子组件调用父组件中的方法

    vue子组件,调用父组件中有三种方法哈!下面我们一起来讲解. 第一种使用 直接在子组件中通过this.$parent.父组件中的方法.来调用父组件的方法 第一种的缺点是不能够传递参数哈.它只能够调用方 ...

  10. windwos10任务栏居中

    如下操作 新建一个文件夹如图 然后出现这个重右往左一直拖然后拉出来就行了如图 拖不动或者没有的把这个关了-锁定任务栏 文字如何隐藏? 在这个文字旁边右击关闭标题即可 然后锁定任务栏就OK了