[luogu7736]路径交点
对于两条路径,注意到每一个交点都会改变两者的上下关系,因此两条路径交点的奇偶性,仅取决于两者的起点和终点是否改变了上下关系(改变即为奇数)
类似地,对于整个路径方案,令$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]路径交点的更多相关文章
- P7736-[NOI2021]路径交点【LGV引理】
正题 题目链接:https://www.luogu.com.cn/problem/P7736 题目大意 有\(k\)层的图,第\(i\)层有\(n_i\)个点,每层的点从上到下排列,层从左到右排列.再 ...
- canvas判断点是否在路径内
应用场景 我们的项目中有个功能是,canvas上的某个图片选中后可以再这个图片上用鼠标拖拽绘制画笔线条. 当然绘制的边界要控制在图片大小范围内的,那么鼠标是可以随意动的,怎么能控制只在图片上的时候才绘 ...
- LGV 引理——二维DAG上 n 点对不相交路径方案数
文章目录 引入 简介 定义 引理 证明 例题 释疑 扩展 引入 有这样一个问题: 甲和乙在一张网格图上,初始位置 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_ ...
- CodeForces 590C Three States BFS
Three Statesy 题解: 以3个大陆为起点,都dfs一遍,求出该大陆到其他点的最小距离是多少, 然后枚举每个点作为3个大陆的路径交点. 代码: #include<bits/stdc++ ...
- 2021NOI同步赛
\(NOI\) 网上同步赛 明白了身为菜鸡的自己和普通人的差距 DAY1 \(T1\) 轻重边 [题目描述] 小 W 有一棵 \(n\) 个结点的树,树上的每一条边可能是轻边或者重边.接下来你需要对树 ...
- LGV 引理小记
讲个笑话,NOI 之前某场模拟赛让我知道了这个神奇的科技,于是准备 NOI 之前学完,结果鸽着鸽着就鸽掉了,考 day1 之前一天本来准备花一天时间学的,然后我就开玩笑般地跟自己说,这么 trivia ...
- LGV 引理
(其实是贺的:https://www.luogu.com.cn/paste/whl2joo4) 目录 LGV 引理 不相交路径计数 例题 Luogu6657. [模板]LGV 引理 CF348D Tu ...
- codeforces 8D Two Friends 二分+ 判断三个圆是否有公共交点
题目链接 有两个人x, y, 现在在A点, x要直接去B点, y要先去C点在去B点, 现在给出x, y两人可以行走的最大距离T1, T2, 求出他们从A点出发之后, 可以走的最长的公共路径. 我们先看 ...
- 全局光照:光线追踪、路径追踪与GI技术进化编年史
全局光照(Global Illumination,简称 GI), 作为图形学中比较酷的概念之一,是指既考虑场景中来自光源的直接光照,又考虑经过场景中其他物体反射后的间接光照的一种渲染技术. 大家常听到 ...
随机推荐
- 数据库MHA原理
一.数据库的高可用MHA (1):详细的步骤 1.master mysql宕机了,MHA manager :无法连接master 2.MHA在S1 S2找一个延迟最小的slave,确定为未来的mast ...
- Python技法2:函数参数的进阶用法
1.关键字参数(positional argument)和位置参数(keyword argument) Python函数的参数根据函数在调用时(注意,不是函数定义时)传参的形式分为关键字参数和位置参数 ...
- Java秘诀!Java赋值运算符介绍
运算符丰富是 Java 语言的主要特点之一,它提供的运算符数量之多,在高级语言中是少见的. Java 语言中的运算符除了具有优先级之外,还有结合性的特点.当一个表达式中出现多种运算符时,执行的先后顺序 ...
- Django实现用户登录注册
本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ...
- springcloud整合config组件
config组件 config组件支持两种配置文件获取方式springcould搭建的微服务的配置文件的获取方式有两种.它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中或者本地 ...
- [no code][scrum meeting] Alpha 13
项目 内容 会议时间 2020-04-21 会议主题 OCR技术对接会议 会议时长 45min 参会人员 全体成员 $( "#cnblogs_post_body" ).catalo ...
- SpringCloud 2020.0.4 系列之服务降级的其他用法与熔断
1. 概述 老话说的好:控制好自己的情绪,才能控制好自己的人生.冲动是魔鬼,冷静才最重要. 言归正传,之前聊了在 Feign 调用时,如何给整个 Feign接口类 增加降级策略. 今天我们来聊一下 H ...
- 常见SOC启动流程分析
本文以s5pv210这款SOC为例,分析了其启动流程 在s5pv210的SOC内部,存在着一个内部的ROM和一个内部的RAM 这个内部的ROM叫做 IROM,它是norflash的一种.其不同于板子上 ...
- 矩阵n次幂的计算
1.归纳法 两大数学归纳法 题目一 2.递推关系 题目一 题目二 3.方阵 题目一 4.矩阵对角化(重点) 题目一 题目二 题目三 题目四 5.矩阵性质(综合) 题目一 题目二 对于副对角线: 题目三
- pascals-triangle leetcode C++
Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Retu ...