对于两条路径,注意到每一个交点都会改变两者的上下关系,因此两条路径交点的奇偶性,仅取决于两者的起点和终点是否改变了上下关系(改变即为奇数)

类似地,对于整个路径方案,令$p_{i}$为以第一层的$i$为起点的路径在第$K$层的终点,那么该方案的交点数的奇偶性,仅取决于$p_{i}$​逆序对数(与逆序对数的奇偶性相同)

但注意到方案还有一个限制:不允许经过重复的点

但事实上,当经过了重复的点,显然将之后的两部分交换,恰好会改变$p_{i}$​​逆序对数的奇偶性

更准确的来说,考虑起点编号最小的两条有公共点的路径,将两者第一个公共点以后的部分交换,显然反过来另一条路径对应的也是原路径,即可以抵消

由此,令$A_{i,j}$​表示起点为第一层的$i$​且终点为第$K$​层的$j$​,显然答案即为$A$​的行列式,可以$o(n^{3})$求出

关于如何求$A$​,令$G_{i}$​为第$i$​层和第$i+1$​层之间的邻接矩阵(大小为$n_{i}\times n_{i+1}$​​)​​,显然$A=\prod_{i=1}^{k-1}G_{i}$(其中乘法为矩阵乘法),可以$o(kn^{3})$求出​

(单组数据)总复杂度为$o(kn^{3})$​​​,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 205
4 #define mod 998244353
5 #define ll long long
6 int t,K,x,y,ans,n[N],m[N],a[N][N][N],b[N][N],c[N][N];
7 int read(){
8 int x=0;
9 char c=getchar();
10 while ((c<'0')||(c>'9'))c=getchar();
11 while ((c>='0')&&(c<='9')){
12 x=x*10+c-'0';
13 c=getchar();
14 }
15 return x;
16 }
17 int qpow(int n,int m){
18 int s=n,ans=1;
19 while (m){
20 if (m&1)ans=(ll)ans*s%mod;
21 s=(ll)s*s%mod;
22 m>>=1;
23 }
24 return ans;
25 }
26 int guess(int n){
27 int ans=1;
28 for(int i=1;i<=n;i++){
29 int k=-1;
30 for(int j=i;j<=n;j++)
31 if (b[j][i]){
32 k=j;
33 break;
34 }
35 if (k<0)return 0;
36 if (k!=i){
37 ans=mod-ans;
38 for(int j=i;j<=n;j++)swap(b[i][j],b[k][j]);
39 }
40 ans=(ll)ans*b[i][i]%mod;
41 int s=qpow(b[i][i],mod-2);
42 for(int j=i;j<=n;j++)b[i][j]=(ll)b[i][j]*s%mod;
43 for(int j=i+1;j<=n;j++){
44 int s=b[j][i];
45 for(int k=i;k<=n;k++)b[j][k]=(b[j][k]-(ll)s*b[i][k]%mod+mod)%mod;
46 }
47 }
48 return ans;
49 }
50 int main(){
51 t=read();
52 while (t--){
53 K=read();
54 for(int i=1;i<=K;i++)n[i]=read();
55 for(int i=1;i<K;i++)m[i]=read();
56 memset(a,0,sizeof(a));
57 for(int i=1;i<K;i++)
58 for(int j=1;j<=m[i];j++){
59 x=read(),y=read();
60 a[i][x][y]=1;
61 }
62 memset(b,0,sizeof(b));
63 for(int i=1;i<=n[1];i++)b[i][i]=1;
64 for(int t=1;t<K;t++){
65 memset(c,0,sizeof(c));
66 for(int i=1;i<=n[1];i++)
67 for(int j=1;j<=n[t];j++)
68 for(int k=1;k<=n[t+1];k++)c[i][k]=(c[i][k]+(ll)b[i][j]*a[t][j][k])%mod;
69 memcpy(b,c,sizeof(b));
70 }
71 printf("%d\n",guess(n[1]));
72 }
73 return 0;
74 }

[luogu7736]路径交点的更多相关文章

  1. P7736-[NOI2021]路径交点【LGV引理】

    正题 题目链接:https://www.luogu.com.cn/problem/P7736 题目大意 有\(k\)层的图,第\(i\)层有\(n_i\)个点,每层的点从上到下排列,层从左到右排列.再 ...

  2. canvas判断点是否在路径内

    应用场景 我们的项目中有个功能是,canvas上的某个图片选中后可以再这个图片上用鼠标拖拽绘制画笔线条. 当然绘制的边界要控制在图片大小范围内的,那么鼠标是可以随意动的,怎么能控制只在图片上的时候才绘 ...

  3. LGV 引理——二维DAG上 n 点对不相交路径方案数

    文章目录 引入 简介 定义 引理 证明 例题 释疑 扩展 引入 有这样一个问题: 甲和乙在一张网格图上,初始位置 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_ ...

  4. CodeForces 590C Three States BFS

    Three Statesy 题解: 以3个大陆为起点,都dfs一遍,求出该大陆到其他点的最小距离是多少, 然后枚举每个点作为3个大陆的路径交点. 代码: #include<bits/stdc++ ...

  5. 2021NOI同步赛

    \(NOI\) 网上同步赛 明白了身为菜鸡的自己和普通人的差距 DAY1 \(T1\) 轻重边 [题目描述] 小 W 有一棵 \(n\) 个结点的树,树上的每一条边可能是轻边或者重边.接下来你需要对树 ...

  6. LGV 引理小记

    讲个笑话,NOI 之前某场模拟赛让我知道了这个神奇的科技,于是准备 NOI 之前学完,结果鸽着鸽着就鸽掉了,考 day1 之前一天本来准备花一天时间学的,然后我就开玩笑般地跟自己说,这么 trivia ...

  7. LGV 引理

    (其实是贺的:https://www.luogu.com.cn/paste/whl2joo4) 目录 LGV 引理 不相交路径计数 例题 Luogu6657. [模板]LGV 引理 CF348D Tu ...

  8. codeforces 8D Two Friends 二分+ 判断三个圆是否有公共交点

    题目链接 有两个人x, y, 现在在A点, x要直接去B点, y要先去C点在去B点, 现在给出x, y两人可以行走的最大距离T1, T2, 求出他们从A点出发之后, 可以走的最长的公共路径. 我们先看 ...

  9. 全局光照:光线追踪、路径追踪与GI技术进化编年史

    全局光照(Global Illumination,简称 GI), 作为图形学中比较酷的概念之一,是指既考虑场景中来自光源的直接光照,又考虑经过场景中其他物体反射后的间接光照的一种渲染技术. 大家常听到 ...

随机推荐

  1. Python 3.10 正式发布,新增模式匹配,同事用了直呼真香!

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 前几天,也就是 10 月 4 日,Python 发布了 3.10.0 版本,什么?3.9 之后居 ...

  2. 【二食堂】Alpha - Scrum Meeting 4

    Scrum Meeting 4 例会时间:4.14 12:30 - 12:50 进度情况 组员 昨日进度 今日任务 李健 1. 主页面的搭建工作issue 1. 完成主页搭建**issue2. 与后端 ...

  3. 软件案例分析——VS和VS Code

    软件案例分析--VS和VS Code 项目 内容 这个作业属于哪个课程/ 2020年春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里? 软件案例分析 我在这个课程的目标是? 提高代码水平,熟 ...

  4. 2021.9.22考试总结[NOIP模拟59]

    T1 柱状图 关于每个点可以作出两条斜率绝对值为\(1\)的直线. 将绝对值拆开,对在\(i\)左边的点\(j\),\(h_i-i=h_j-j\),右边则是把减号换成加号. 把每个点位置为横坐标,高度 ...

  5. WPF PropertyChanged实现子属性通知

    今天用WPF的View绑定了ViewModel的一个属性类,结果在属性类的子属性修改时,没有通知到UI. 如有要显示一个学生信息,采用WPF MVVM的模式,则前端代码 <StackPanel& ...

  6. matplotlib散点图

    我们常用的统计图如下: 1.学会绘制散点图 一个小demo: 假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规 ...

  7. 局域网(以太网与IEEE 802.3、IEEE 802.11、)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105016637 学习课程:<2019王道考研计算机网络> 学习目的 ...

  8. Python ImportError: No module named '_tkinter', please install the python3-tk package

    ImportError: No module named '_tkinter', please install the python3-tk package 这个问题的原因是使用的python3环境内 ...

  9. DP秒思维

    DP算法对于大部分题有着良好的能力,但有些题目我们要转换思维,不能直接的设具体的转态.... 最近做了两道秒题,在这里分享一下: https://ac.nowcoder.com/acm/contest ...

  10. Mybatis实现简单的CRUD(增删改查)原理及实例分析

    Mybatis实现简单的CRUD(增删改查) 用到的数据库: CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user` ...