8.20T3 无损加密(线性代数转LGV+状压dp+高维前缀和)

http://cplusoj.com/d/senior/p/NODSX2301C

对于式子:

在这里插入图片描述

这个神秘的线性代数形式比较难处理,但我们可以考虑其组合意义。行列式现存的可用组合意义之一就是LGV(矩阵式不太可用)

先把原先的矩阵转化为一个有向图。现在我们要构造一个图,满足 B i , j B_{i,j} Bi,j 代表从 a i a_i ai 走到 b j b_j bj 所有路径权值积的和为 B i , j B_{i,j} Bi,j,而上面行列式求的就是从 a 1 → n a_{1\to n} a1n 走到 b b b 的任意 ( m n ) \binom m n (nm) 个点的不想交路劲数。

现在我们已经理清条件,考虑构造图了。我们先弄一行 a a a b b b

在这里插入图片描述

现在是满足条件的。

我们考虑在 [ l , r ] [l,r] [l,r] 内加入 d , c d,c d,c,不妨令其为 [ 2 , 3 ] [2,3] [2,3],在外面加没问题:

在这里插入图片描述

而对于 [l,r] 内的情况,我们相当于在原先基础上多了一个不断往右增 c c c 的边:

在这里插入图片描述

这样子建边能完美解决我们的问题。

现在只需要对最终的图统计不相交路径数即可。

我们考虑第 i i i 列的链:

在这里插入图片描述

根据题目,这条链的总入度和总出度不超过 s s s,其实我们状压一下。

我们可以先钦定哪些入度有流,从上一步的 f [ S ] f[S] f[S] 转移过来,当然必须满足红色点也有流。

然后我们直接让这些流先走到最近的出度。

当走到最近的出度后,他们还可以往下走,此时我们可以拿一个类似高维前缀和的东西来实现。而这里,我们要按顺序,先走最上面,再往下一个一个考虑,那样子才能保证路径不交。

我们可以设 g ( s , i ) g(s,i) g(s,i) 表示当前状态是 s s s,考虑到第 i i i 个1的路径权值积之和、

最后我们把黄色点的东西去掉,就可以转移到新 f [ T ] f[T] f[T]

答案为 f [ 0 ] f[0] f[0]

复杂度我实现有点劣,为 O ( n 2 s s 2 ) O(n2^s s^2) O(n2ss2),但很多情况会直接停止,所以跑不满。

4k

#include<bits/stdc++.h>
using namespace std;
#ifdef LOCAL#define debug(...) fprintf(stdout, ##__VA_ARGS__)#define debag(...) fprintf(stderr, ##__VA_ARGS__)
#else#define debug(...) void(0)#define debag(...) void(0)
#endif
#define int long long
inline int read(){int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;
ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+
(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
#define fi first
#define se second
#define M 9
#define mo (int)(1e9 + 7)
#define N 200010
int pw(int a, int b) {int ans = 1; while(b) {if(b & 1) ans *= a; a *= a; b >>= 1; ans %= mo; a %= mo; }return ans; 
}
int pw(int a) { return pw(a, mo - 2); }
inline void Mod(int &a) { if(a >= mo || a <= -mo) a %= mo; if(a < 0) a += mo; }
inline void Add(int &a, int b) { a += b; Mod(a); }
inline void Mul(int &a, int b) { Mod(b); a *= b; Mod(a); } 
int n, m, i, j, k, T;
int C[N * M], D[N * M], q, l, r, Ds[N * M]; 
vector<int>L[N], R[N]; 
int nl, nr, s, t, f[1 << 10], g[1 << 10][11], nxt[15]; 
int ans, c[15], d[15], del[15]; signed main()
{#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);#endif
//	srand(time(NULL));
//	T=read();
//	while(T--) {
//
//	}n = read(); m = read(); q = read(); Ds[0] = C[q + 1] = 1; for(T = 1; T <= q; ++T) {l = read(); r = read(); C[T] = read(); D[T] = read(); Ds[T] = D[T] * Ds[T - 1] % mo; for(j = l + 1; j <= r; ++j) L[j].pb(T); for(j = l; j < r; ++j) R[j].pb(T); }Ds[q + 1] = Ds[q]; debug("Ds : "); for(i = 0; i <= q + 1; ++i) debug("%lld ", Ds[i]); debug("\n"); f[0] = 1; for(T = 1; T <= m; ++T) {nl = L[T].size(); j = 0; R[T].pb(q + 1); nr = R[T].size(); for(auto t : L[T]) debug("%lld ", t); debug("\n"); for(auto t : R[T]) debug("%lld ", t); debug("\n"); for(auto t : L[T]) {for(k = 0; k < nr; ++k) if(R[T][k] >= t) break; nxt[j] = k; del[j] = Ds[R[T][k]] * pw(Ds[t]) % mo; ++j; debug("[%lld %lld]%lld ", t, R[T][k], nxt[j - 1]); }debug("\n"); memset(g, 0, sizeof(g)); for(s = 0; s < (1 << nl); ++s) {debug("f[%lld] = %lld\n", s, f[s]); t = (T <= n ? 1 : 0); int G = (T <= n ? Ds[R[T][0]] : 1); for(j = 0; j < nl; ++j) {if(!(s & (1 << j))) continue; if(t & (1 << nxt[j])) break; t |= (1 << nxt[j]); G = G * del[j] % mo; }if(j < nl) continue; debug("--> %lld[%lld %lld] += %lld\n", t, t, 1ll, f[s]); 
//			if(!t) Add(g[t][0], f[s]); 
//			else Add(g[t][1], f[s] * G % mo); }for(i = 0; i < nr; ++i) c[i] = C[R[T][i]]; for(i = 0; i < nr - 1; ++i) d[i] = Ds[R[T][i + 1]] * pw(Ds[R[T][i]]) % mo; debug("# C : "); for(i = 0; i < nr; ++i) debug("%lld ", c[i]); debug("\n"); debug("# D : "); for(i = 0; i < nr - 1; ++i) debug("%lld ", d[i]); debug("\n"); for(i = 1; i <= nl + 1; ++i) //第 for(s = 0; s < (1 << nr); ++s) {
//				debug("(%lld %lld)\n", s, i); if(!g[s][i]) continue; if(__builtin_popcount(s) < i) continue; for(k = j = 0; k < nr; ++k) {if((s >> k) & 1) ++j; if(j == i) break; }debug("(%lld %lld)%lld * %lld [%lld] => (%lld %lld)\n", s, i, g[s][i], c[k], k, s, i + 1); Add(g[s][i + 1], g[s][i] * c[k] % mo); if(k + 1 >= nr || ((s >> k + 1) & 1)) continue; t = s - (1 << k) + (1 << k + 1); debug("(%lld %lld)%lld * %lld [%lld] => (%lld %lld)\n", s, i, g[s][i], d[k], k, t, i); Add(g[t][i], g[s][i] * d[k] % mo); }memset(f, 0, sizeof(f)); for(s = 0; s < (1 << nr); ++s) {t = s & (1 << nr - 1) - 1; int cnt = __builtin_popcount(s); debug(">>> %lld ---> %lld (%lld %lld)[%lld]\n", s, t, s, cnt + 1, g[s][cnt + 1]); Add(f[t], g[s][cnt + 1]); }debug("------------\n"); }ans = f[0]; printf("%lld", ans); 
//	for(i = 1; i <= m; ++i) assert(L[i].size() <= 8 && R[i].size() <= 8); return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS如何将投影坐标系转回为地理坐标系

有时候两个数据&#xff0c;一个为投影坐标系&#xff0c;另一个为地理坐标系时&#xff0c;在GIS软件中位置无法叠加到一起&#xff0c;这需要将两个或多个数据的坐标系统一&#xff0c;可以直接将地理坐标系的数据进行投影&#xff0c;或将投影坐标系转为地理坐标系。下面介绍…

自养号测评技术:如何挑选适合的IP环境方案

市面上的IP服务及常见问题 当前市场上常见的IP服务包括911、Luminati、Google Fi、TM流量卡、Socks专线等。这些服务在为用户提供网络代理或VPN服务时&#xff0c;常会遇到以下主要问题&#xff1a; 1. 高负载与重复率高&#xff1a;由于使用人数众多&#xff0c;导致网络拥堵…

移动端爬虫学习记录

免责声明 本文旨在探讨移动端爬虫技术的应用和挑战&#xff0c;仅供教育和研究用途。请确保在合法合规的框架内使用爬虫技术&#xff0c;遵循相关法律法规和网站的使用条款。作者不对因使用本文内容而产生的任何法律或安全问题承担责任。 1、初识移动端爬虫 学习移动端爬虫的原…

docker映射了端口,宿主机不生效

1、问题产生原因 docker run -d --name my-redis -p 6379:6379 -v /usr/redis.conf:/usr/local/etc/redis/redis.conf team-redis:3.2 redis-server /usr/local/etc/redis/redis.conf 这容器跑起来了&#xff0c;端口6379没用。搞的我一直怀疑哪里出错了&#xff0c;查看配置…

Kakfa的核心概念-Replica副本(kafka创建topic并指定分区和副本的两种方式)

Kakfa的核心概念-Replica副本&#xff08;kafka创建topic并指定分区和副本的两种方式&#xff09; 1、kafka命令行脚本创建topic并指定分区和副本2、springboot集成kafka创建topic并指定分区和副本2.1、springboot集成kafka2.1.1、springboot集成kafka创建topic并指定5个分区和…

VScode 连接远程服务器

1、 2、 3、免密登录 1、本地生成密钥 ssh-keygen2、生成的密钥默认在 C:\Users\***\.ssh\ 中3、将私钥 C:\Users\***\.ssh\id_rsa 添加到上面的配置文件中的 IdentityFile 项内4、将公钥 C:\Users\***\.ssh\id_rsa\id_rsa.pub 拷贝到远程 ~/.ssh/authorized_keys 中 4、远程…

【精选】基于django柚子校园影院(咨询+解答+辅导)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Golang | Leetcode Golang题解之第371题两整数之和

题目&#xff1a; 题解&#xff1a; func getSum(a, b int) int {for b ! 0 {carry : uint(a&b) << 1a ^ bb int(carry)}return a }

「Python数据分析」Pandas进阶,利用concat()函数连接数据(一)

在我们迈向中高级出局数据分析的过程中&#xff0c;数据的合并和连接&#xff0c;是一个非常重要的技能。 现实中&#xff0c;分散在各种数据库&#xff0c;各种数据表格&#xff0c;各种数据存储设备当中的&#xff0c;各式各样的数据&#xff0c;是我们进行数据分析的基础&a…

SmartGit-Git版本控制系统的图形化客户端

SmartGit&#xff1a; SmartGit是一款免费的、专业的Git版本控制系统的图形化客户端。它适用于Windows、Mac和Linux等多种操作系统&#xff0c;提供了直观的用户界面和丰富的功能。支持创建、克隆、推送、拉取、合并和管理Git仓库&#xff0c;以及强大的分支管理功能。还提供了…

(免费领源码)python#Django#msyql学生个性化培养的教学资源平台的设计与实现19385-计算机毕业设计项目选题推荐

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对学生个性化培养的教学资源平台等问题&#…

进制转换计算幸运数出现次数(华为od机考题)

一、题目 1.原题 有位客人来自异国&#xff0c;在该国使用m进制计数。 该客人有个幸运数字n(n<m)&#xff0c;每次购物时&#xff0c; 其总是喜欢计算本次支付的花费(折算为异国的价格后)中存在多少幸运数字。 问&#xff1a;当其购买一个在我国价值k的产品时&#xff0c;…

UE管理内容 —— FBX Asset Metadata Pipeline

随着实时3D制作大小和复杂程度的增加&#xff0c;以及构成现代制作流程的工具数量的不断增加&#xff0c;增加智能自动化来提高美术效率变得越发重要&#xff1b;这种智能自动化通常主要依靠元数据&#xff1a;有关资源的自定义数据&#xff0c;在项目中为资源赋予意义&#xf…

【Nginx】快速入门

概述 Nginx(engine x)是一个高性能的HTTP和反向代理web服务器。 特点是占有内存小&#xff0c;并发能力强&#xff0c;简单易配置&#xff0c;支持高达 50000 个并发连接数的响应。 作用 代理 正向代理&#xff1a; 反向代理&#xff1a; 负载均衡 Nginx提供的负载均衡策…

8.4 数据库基础技术-SQL

大数据 SQL语言 真题 1

[C语言]一、C语言基础

G:\Cpp\C语言精讲 1. C语言入门 1.1 初识计算机语言 计算机编程语言&#xff0c;就是人与计算机交流的方式。人们可以使用编程语言对计算机下达命令&#xff0c;让计算机完成人们需要的功能。 计算机语言有很多种。如&#xff1a;C 、C、Java、Go、JavaScript、Python&#x…

【Spring】初识Spring MVC

文章目录 前言一、MVC是什么&#xff1f;二、学习Spring MVC建立连接RequestMapping注解注解的使用细节 三、传递参数的情况传递单个参数1.传递String2.传递包装类/基本类型3.参数重命名(RequestParam) 传递多个参数传递对象传递数组传递集合参数为变量传递文件小细节 四、JSON…

【数据结构篇】~二叉树(堆)

【数据结构篇】~二叉树&#xff08;堆&#xff09; 二叉树1.树2.树的组成3.二叉树4.堆1.向上调整算法2.向下调整算法3.堆排序 4.topk问题源码 二叉树 1.树 树的概念与结构​ 树是一种非线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成一个…

Redis管道(Pipeline)

Pipeline是为了解决RTT&#xff0c;仅仅是将命令打包一次性发送&#xff0c;对整个Redis的执行不造成其它任何影响。是批处理命令变种优化措施&#xff0c;类似Redis的原生批命令&#xff08;如mset和mget&#xff09;。 问题由来 Redis是一种基于客户端-服务端模型以及请求/响…

【机器学习】特征工程的基本概念以及LASSO回归和主成分分析优化方法

引言 特征工程是机器学习中的一个关键步骤&#xff0c;它涉及到从原始数据中提取和构造新的特征&#xff0c;以提高模型的性能和预测能力LASSO&#xff08;Least Absolute Shrinkage and Selection Operator&#xff09;回归是一种用于回归分析的线性模型&#xff0c;它通过引入…