???--???Insection is not allowed

题意 :
给你一个n*n的网格图,还有k个起点和k个终点。
保证起点均为(1,a[i]),终点均为(n,b[i])且0 < a[1] < a[2] < ... < a[k] <= n ,0 < b[1] < b[2] < ... < b[k] <=n 。
求从所有起点到终点的k条路径互不相交的方案数。

数据范围 : n <= 1e5 , k <= 100

------------------------------------------------此后一千里---------------------------------------------------

我们考虑对于每一种起点与终点对应的方案,即并不a[i] -> b[i] ,而可以 a[i] -> b[j] 的方案,那么如果这时有两条路径有交的话,那么我们选取一个交点,把交在这点的两条路径之后部分交换一下,就可以得到另一种方案。而如果我们用行列式去计算的话,会发现这两种方案一正一负正好抵消。那么方案数其实就是这个行列式的值。
具体的行列式就是 A[i][j] = 从 (1 , a[i]) 到 (n , b[j])的方案数,就是一个组合数。
代码 : 略

posted @ 2017-03-28 15:36  ihopenot  阅读(126)  评论(0编辑  收藏  举报