zoukankan      html  css  js  c++  java
  • LGV定理

    LGV定理用于解决路径不相交问题。

    定理

    (n) 个起点 (1, 2, 3, ..., n),它们 分别对应 要到 (n) 个终点 (A, B, C, ..., X),并且要求路径点不相交。求方案数。

    (e_{i, W}) 表示从起点 (i) 到终点 (W) 的方案数。则最终答案为:

    [egin{vmatrix} e_{1, A} & e_{1,B} & ... & e_{1, X}\ e_{2, A} & e_{2, B} & ... & e_{2, X}\ ... & ... & ... & ...\ e_{n, A} & e_{n, B} & ... & e_{n, X}end{vmatrix}]

    (这俩竖线是行列式的意思)

    其中 (n = 2) 的情况挺好理解的,因为它表示出来是:

    [egin{vmatrix} e_{1, A} & e_{1, B}\ e_{2, A} & e_{2, B}end{vmatrix}]

    即:

    [e_{1, A} * e_{2, B} - e_{1, B} * e_{2, A} ]

    前面部分是不考虑“不相交”的合法方案数。但是可能会有相交的情况。我们发现如果在第一个相交点的地方偷偷的交换一下路径的来源,那么每一种不合法路径唯一对应一种 1 到 (B),2 到 (A) 的路径;同时每一种 1 到 (B),2 到 (A) 的路径唯一对应一种不合法路径。因此可以用 (e_{1, B} * e_{2, A}) 来计算不合法路径。然后容斥即可。

    这种方法类似求卡特兰数通项公式的方法。

    实际上 (n > 2) 的情况也可以用容斥思想感性理解。

    例题:CF348D Turtles

    (n = 2) 时的板子题。直接DP求解出 (e),然后手算行列式即可。

  • 相关阅读:
    Object-c NSArray
    内存管理池
    Objuct-c 对象的初始化 存起器 属性 self和super 内存管理
    继承什么的
    Object C 多态性
    Objectvie
    (重点) 协议
    分类
    一张图了解Python
    转载 MySql常用查询语句(23种)
  • 原文地址:https://www.cnblogs.com/JiaZP/p/13307642.html
Copyright © 2011-2022 走看看