题目链接

题意 : 给定方格中第一行的各个起点、再给定最后一行与起点相对应的终点、问你从这些起点出发到各自的终点、不相交的路径有多少条、移动方向只能向下或向右

分析 :

首先对于多起点和多终点的不相交路径、有一个LGV定理

实际上就是 n^2 构造矩阵、再计算其行列式

矩阵的构造方法可以看看这个 ==> Click here

那么接下来就是确定各自路径的方案数了

这是一个经典问题

这里需要求解组合数、用预处理阶乘逆元的方法即可求出

#include<bits/stdc++.h>
#define LL long long
using namespace std;

;
;

LL Fac_inv[Comb_Maxn];
LL Fac[Comb_Maxn];

inline void Comb_init()
{
    Fac_inv[] = Fac[] = ;
    Fac_inv[] = ;

    ; i<Comb_Maxn; i++)
        Fac[i] = Fac[i-] * (LL)i % mod;

    ; i<Comb_Maxn; i++)
        Fac_inv[i] = (LL)(mod - mod / i) * Fac_inv[mod % i] % mod;

    ; i<Comb_Maxn; i++)
        Fac_inv[i] = Fac_inv[i-] * Fac_inv[i] % mod;
}

LL Comb(int n, int m)
{ return Fac[n] * Fac_inv[m] % mod * Fac_inv[n-m] % mod; }

const int maxm = 1e2;
LL Mat[maxm+][maxm+];
int turn,n;
void gcd(LL a,LL b,LL &d,LL &x,LL &y)
{
    ,y=;
    else{
        ++turn;
        gcd(b,a%b,d,y,x);
        y-=x*(a/b);
    }
}
LL det(LL n)
{
    LL tmp1[maxm+],tmp2[maxm+];
    LL ans=;
    ;i<=n;++i){
        ;j<=n;++j){
            ){
                LL A=Mat[i][i],B=Mat[j][i],d,x,y;
                turn=;
                gcd(A,B,d,x,y);
                ;k<=n;++k) tmp1[k]=Mat[i][k],tmp2[k]=Mat[j][k];
                ;k<=n;++k) Mat[i][k]=(x*tmp1[k]+y*tmp2[k])%mod;
                A/=d,B/=d;
                ) x=B,y=-A,ans=-ans%mod;else x=-B,y=A;
                ;k<=n;++k) Mat[j][k]=(x*tmp1[k]+y*tmp2[k])%mod;
            }
        }
        ans=ans*Mat[i][i]%mod;
    }
    ) ans+=mod;
    return ans;
}

int A[maxm], B[maxm];
int main(void)
{
    Comb_init();
    int nCase;
    scanf("%d", &nCase);
    while(nCase--){
        int n, k;
        scanf("%d %d", &n, &k);
        ; i<=k; i++) scanf("%d", &A[i]);
        ; i<=k; i++) scanf("%d", &B[i]);
        ; i<=k; i++){
            ; j<=k; j++){
                int a, b;
                a = n-+B[j]-A[i];
                b = n-;
                ;
                 || b < ) Mat[i][j] = ;
                else Mat[i][j] = Comb(a, b);
            }
        }

        printf("%lld\n", det(k) % mod);
    }
    ;
}

HDU 5852 Intersection is not allowed! ( 2016多校9、不相交路径的方案、LGV定理、行列式计算 )的更多相关文章

  1. HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解

    题意:有K个棋子在一个大小为N×N的棋盘.一开始,它们都在棋盘的顶端,它们起始的位置是 (1,a1),(1,a2),...,(1,ak) ,它们的目的地是 (n,b1),(n,b2),...,(n,b ...

  2. hdu 5744 Keep On Movin (2016多校第二场)

    Keep On Movin Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  3. HDU 5402(Travelling Salesman Problem-构造矩阵对角最长不相交路径)

    Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (J ...

  4. HDU 5732 Subway(2016多校1J,树的重心 + 哈希)

    题目链接  2016多校1 Problem J 题意  给定两棵相同的树,但是编号方案不同.求第一棵树上的每个点对应的第二棵树上的点.输出一种方案即可. 首先确定树的直径的中点.两棵树相等意味着两棵树 ...

  5. hdu 5852 :Intersection is not allowed! 行列式

    有K个棋子在一个大小为N×N的棋盘.一开始,它们都在棋盘的顶端,它们起始的位置是 (1,a1),(1,a2),...,(1,ak) ,它们的目的地是 (n,b1),(n,b2),...,(n,bk). ...

  6. HDU 5795 A Simple Nim (博弈) ---2016杭电多校联合第六场

    A Simple Nim Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  7. hdu 5120 Intersection

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 A ring is a 2-D figure bounded by two circles sh ...

  8. hdu 5120 Intersection 圆环面积交

    Intersection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5 ...

  9. HDU 5963 朋友 【博弈论】 (2016年中国大学生程序设计竞赛(合肥))

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...

随机推荐

  1. (十二)springMvc 处理图片,视频等文件的上传

    文章目录 导包 修改表单类型 配置解析器 处理上传的图片 补充一个自己写的工具类 导包 需要导入如下的包 commons-fileupload-1.3.3.jar commons-io-2.6.jar ...

  2. Thinking In Java 4th Chap4 控制执行流程

    Foreach语法: 例如:float f[]=new float [10]; for(float x:f){/*****/} for(char c:"Afaslkd aslfjala al ...

  3. 最新精仿Chinaz中国站长网整站源码带全部数据带采集功能

    用范围: 站长网源码演示地址:php源码运行环境:  phpChinaz站长网对于广大站长来说,是不会陌生的,现在几乎成为了每个站长都必须上的网站了.这次分享的是Chinaz站长网的源码,包含了chi ...

  4. Python学习3——列表和元组

    一.通用序列操作——索引.切片.相加.相乘.成员资格检查 1.索引,正序从0开始为第一个元素,逆序从-1开始,-1为最后一个元素 >>> greeting[0] 'h' >&g ...

  5. APP安全测试之安装/卸载/更新测试

    在app测试中,有个不可忽视的测试方向,就是安装.卸载和更新,有很多人问到了这个问题,我就在这里做了一个总结,有补充的请留言哦 安装 1.正常安装测试,检查是否安装成功. 2.APP版本覆盖测试.例如 ...

  6. 《深入理解 Java 虚拟机》学习 -- 类加载机制

    <深入理解 Java 虚拟机>学习 -- 类加载机制 1. 概述 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 J ...

  7. 行内块和文字垂直对齐vertical-agign

    vertical-align 垂直对齐 (对于块级元素无效,主要用来控制表单或者图片与文字对齐的) 图片和文字默认是基线对齐 属性: baseline 基线 top 顶线 middle 中线 bott ...

  8. PLSQL导出表结构和数据的三种方式

    1.导出表结构和数据方式1.tools->export user objects是导出表结构 tools ->export user object 选择选项,导出.sql文件 说明:导出的 ...

  9. 交换机配置-----monitor session

    目录 交换机配置-----monitor 1.前言 2.monitor session的作用 3.配置命令 4.使用 交换机配置-----monitor 1.前言 本文章适用于Dell Network ...

  10. (十二)A64

    一.AC108驱动移植 1.驱动添加 cp r18/lichee/linux-4.4/sound/soc/codecs/ac108.* a64/linux-3.10/sound/soc/codecs/ ...