HDU 5852 Intersection is not allowed! ( 2016多校9、不相交路径的方案、LGV定理、行列式计算 )
题意 : 给定方格中第一行的各个起点、再给定最后一行与起点相对应的终点、问你从这些起点出发到各自的终点、不相交的路径有多少条、移动方向只能向下或向右
分析 :
首先对于多起点和多终点的不相交路径、有一个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定理、行列式计算 )的更多相关文章
- HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解
题意:有K个棋子在一个大小为N×N的棋盘.一开始,它们都在棋盘的顶端,它们起始的位置是 (1,a1),(1,a2),...,(1,ak) ,它们的目的地是 (n,b1),(n,b2),...,(n,b ...
- hdu 5744 Keep On Movin (2016多校第二场)
Keep On Movin Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- HDU 5402(Travelling Salesman Problem-构造矩阵对角最长不相交路径)
Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (J ...
- HDU 5732 Subway(2016多校1J,树的重心 + 哈希)
题目链接 2016多校1 Problem J 题意 给定两棵相同的树,但是编号方案不同.求第一棵树上的每个点对应的第二棵树上的点.输出一种方案即可. 首先确定树的直径的中点.两棵树相等意味着两棵树 ...
- hdu 5852 :Intersection is not allowed! 行列式
有K个棋子在一个大小为N×N的棋盘.一开始,它们都在棋盘的顶端,它们起始的位置是 (1,a1),(1,a2),...,(1,ak) ,它们的目的地是 (n,b1),(n,b2),...,(n,bk). ...
- HDU 5795 A Simple Nim (博弈) ---2016杭电多校联合第六场
A Simple Nim Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- hdu 5120 Intersection
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 A ring is a 2-D figure bounded by two circles sh ...
- hdu 5120 Intersection 圆环面积交
Intersection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5 ...
- HDU 5963 朋友 【博弈论】 (2016年中国大学生程序设计竞赛(合肥))
朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...
随机推荐
- C++编写DLL文件
动态链接库DLL文件与EXE文件一样也是可执行文件,但是DLL也被称为库,因为里面封装了各种类.函数之类的东西,就像一个库一样,存着很多东西,主要是用来调用的.调用方式主要分为两种:隐式(通过lib文 ...
- 网络编程[第二篇]基于udp协议的套接字编程
udp协议下的套接字编程 一.udp是无链接的 不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...
- pthread_cancel 相关
假设线程A对线程B发出了一个取消请求.通过如下函数: #include <pthread.h> int pthread_cancel(pthread_t thread); 参数: thre ...
- 使用python django快速搭建微信公众号后台
前言 使用python语言,django web框架,以及wechatpy,快速完成微信公众号后台服务的简易搭建,做记录于此. wechatpy是一个python的微信公众平台sdk,封装了被动消息和 ...
- Codeforces 1247F. Tree Factory
传送门 正难则反,把链操作成树不好想,那么考虑一下如何把树变成链 每次操作相当于把一个兄弟变成儿子(我把你当兄弟你竟然想把我当儿子.jpg) 注意到每次操作最多只能使树的深度增加 $1$ 因为链的深度 ...
- 我的第一个python web开发框架(2)——第一个Hello World
小白中午听完老菜讲的那些话后一直在思考,可想来想去还是一头雾水,晕晕呼呼的一知半解,到最后还是想不明白,心想:老大讲的太高深了,只能听懂一半半,看来只能先记下来,将明白的先做,不明白的等以后遇到再学. ...
- Callable和Future的区别
Callable 在Java中,创建线程一般有两种方式,一种是继承Thread类,一种是实现Runnable接口.然而,这两种方式的缺点是在线程任务执行结束后,无法获取执行结果.我们一般只能采用共享变 ...
- golang代码中生成pprof和trace报告
// 生成 CPU 报告 import ( "context" "runtime/pprof" "log" ) func cpuProfil ...
- 使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据
一. 使用证书结合对称加密算法加.解密长数据 上一章节讨论了如何使用RSA证书加密数据,文中提到:“Dotnet的RSA实现有个特点,它必须要在明文中添加一些随机数,所以明文不能把128字节占满,实 ...
- ie/chorme 清除缓存 刷新js,css
1 有时候你发现你刚改过的js 没有用,然后就是你的浏览器 没有清楚缓存,它可能还是保存的之前的 网页文件: chorme 浏览器下(版本:ver 59.0.3071.104(正式版本) (64 位) ...