不相信自己的人,连努力的价值都没有。|

Code_AC

园龄:3年粉丝:5关注:3

LGV引理小记

由于是看 oi-wiki 学的,内容基本是搬过来的。

小前提: LGV 引理仅适用于有向无环图

定义

ω(P) 表示 P 这条路径上所有边的边权之积。(路径计数时,可以将边权都设为 1)(事实上,边权可以为生成函数)

e(u,v) 表示从 uv每一条路径 Pω(P) 之和,即 e(u,v)=P:uvω(P)

起点集合 A,是有向无环图点集的一个子集,大小为 n

终点集合 B,也是有向无环图点集的一个子集,大小也为 n

一组 AB 的不相交路径 SSi 是一条从 AiBσ(S)i 的路径(σ(S) 是一个排列),对于任何 ijSiSj 没有公共顶点。

t(σ) 表示排列 σ 的逆序对个数。

引理

M=[e(A1,B1)e(A1,B2)e(A1,Bn)e(A2,B1)e(A2,B2)e(A2,Bn)e(An,B1)e(An,B2)e(An,Bn)]det(M)=S:AB(1)t(σ(S))i=1nω(Si)

其中 S:AB 表示满足上文要求的 AB 的每一组不相交路径 S

证明

由行列式定义可得

det(M)=σ(1)t(σ)i=1ne(ai,bσ(i))=σ(1)t(σ)i=1nP:aibσ(i)ω(P)

观察到 i=1nP:aibσ(i)ω(P),实际上是所有从 AB 排列为 σ 的路径组 Pω(P) 之和。

σ(1)t(σ)i=1nP:aibσ(i)ω(P)=σ(1)t(σ)P=σω(P)=P:AB(1)t(σ)i=1nω(Pi)

此处 P 为任意路径组。

U 为不相交路径组,V 为相交路径组,

P:AB(1)t(σ)i=1nω(Pi)=U:AB(1)t(U)i=1nω(Ui)+V:AB(1)t(V)i=1nω(Vi)

P 中存在一个相交路径组 Pi:a1ub1,Pj:a2ub2,则必然存在和它相对的一个相交路径组 Pi=a1ub2,Pj=a2ub1P 的其他路径与 P 相同。可得 ω(P)=ω(P),t(P)=t(P)±1

因此我们有 V:AB(1)t(σ)i=1nω(Vi)=0

det(M)=U:AB(1)t(U)i=1nω(Ui)=0

证毕。

例题

CF348D Turtles

比较直接的 LGV 引理的应用。考虑所有合法路径,发现从 (1,1) 出发一定要经过 A={(1,2),(2,1)},而到达终点一定要经过 B={(n1,m),(n,m1)},则 A,B 可立即选定。应用 LGV 引理可得答案为:

|f(a1,b1)f(a1,b2)f(a2,b1)f(a2,b2)|=f(a1,b1)×f(a2,b2)f(a1,b2)×f(a2,b1)

其中 f(a,b) 为图上 ab 的路径数,带有障碍格点的路径计数问题可以直接做一个 Θ(nm) 的 dp,则 f 易求。最终复杂度 Θ(nm)

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MOD=1e9+7;
const int MAXN=3e3+5;
int n,m;
int dp[MAXN][MAXN];
char ma[MAXN][MAXN];
inline int solve(int x1,int y1,int x2,int y2)
{
memset(dp,0,sizeof(dp));
dp[x1][y1]=(ma[x1][y1]=='.');
for(int i=1;i<=x2;i++)
for(int j=1;j<=y2;j++)
{
if(ma[i][j]=='#') continue;
dp[i][j]=(dp[i][j]+dp[i-1][j])%MOD;
dp[i][j]=(dp[i][j]+dp[i][j-1])%MOD;
}
return dp[x2][y2]%MOD;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>ma[i][j];
int res1=solve(1,2,n-1,m);
int res2=solve(1,2,n,m-1);
int res3=solve(2,1,n-1,m);
int res4=solve(2,1,n,m-1);
int ans=((res1*res4)%MOD-(res2*res3)%MOD+MOD)%MOD;
printf("%lld\n",ans);
return 0;
}

本文作者:Code_AC

本文链接:https://www.cnblogs.com/code-ac/p/17721904.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Code_AC  阅读(11)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起