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. 基于python的药店药品信息管理系统-毕业设计-课程设计

    基于python+django+vue.js开发的药店信息管理系统 功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发. 功能包括:药品管理.分类 ...

  2. 带你熟悉NLP预训练模型:BERT

    本文分享自华为云社区<[昇思技术公开课笔记-大模型]Bert理论知识>,作者: JeffDing. NLP中的预训练模型 语言模型演变经历的几个阶段 word2vec/Glove将离散的文 ...

  3. [转帖]MySQL 官方出品,比 mydumper 更快的多线程逻辑备份工具-MySQL Shell Dump & Load

    MySQL 官方出品,比 mydumper 更快的多线程逻辑备份工具-MySQL Shell Dump & Load - 知乎 (zhihu.com) ​ 目录 收起 什么是 MySQL Sh ...

  4. [转帖]linux中的set -e 与set -o pipefail

    https://www.cnblogs.com/xingmuxin/p/8431970.html 1.set -e "Exit immediately if a simple command ...

  5. [转帖]linux系统主机双网卡实现路由转发问题与解决

    1. 环境 拓扑: 网卡配置: host1: 192.168.1.1/24 host2: 左eth0: 192.168.1.2/24 右eth1: 192.168.2.2/24 host3: 192. ...

  6. [转帖]使用 TiDB 读取 TiFlash

    https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash 本文档介绍如何使用 TiDB 读取 TiFlash 副本. TiDB ...

  7. [转帖]Kubernetes-15:一文详解Pod、Node调度规则(亲和性、污点、容忍、固定节点)

    https://www.cnblogs.com/v-fan/p/13609124.html Kubernetes Pod调度说明 简介 Scheduler 是 Kubernetes 的调度器,主要任务 ...

  8. [转帖]使用JAYDEBEAPI同时连接两个不同数据库(ORACLE+MYSQL)的问题

    jaydebeapi 同时连接两种数据库 在使用jaydebeapi只连接一种数据库时,是没问题的,但是如果需要同时连接两种数据库,比如同时连接oracle和mysql 例如以下测试代码:   imp ...

  9. openssh 修改版本号显示

    #背景介绍:G端项目经常收到相关漏洞但有时升级最新版本(8.8p)还是会有相关漏洞(CVE-2020-15778),只能禁用相关命令或修改版本号 #漏洞名称OpenSSH 命令注入漏洞(CVE-202 ...

  10. 万能shell 简单查看已存在日志所有的启动记录

    程序将日志 自动打包成了 gz 文件,  今天突然想查查所有的日志有没有相关关键字. 第一步解压缩所有的日志 cd 到相关目录 for i in `ls` ; do gzip -d $i ; done ...