题目简化和分析:

涉及算法:并查集

为什么要使用并查集:

  • 因为交换只能是列交换,并且保证不与别的重复
  • 我们通过观察题目发现,某些列之间互为限制关系
  • 即如果某列序列排序方式固定,则被限制的列也为固定的
  • 此时我们会发现只有两种(一个互相限制的集合列)

既然如此,我们将这每个集合看作为一个联通分量。

用并查集枚举有几个连通分量。

特别的,一列中的两个数肯定互相限制。

如果我们有 \(ans\) 个联通分量。

则答案为 \(2^{ans}\) 。

注意:一定要开 long long

Solution:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
#define int long long
const int N=4e5+50;
const int mod=1e9+7;
int t,n;
int p[N],a[N],b[N];
int find(int x){
if(x!=p[x]) return p[x]=find(p[x]);
return p[x];
}
int qbow(int a,int b,int m)
{
ll ans=1;
while(b>0)
{
if(b%2!=0)
ans=ans*a%m;
a=a*a%m;
b=b>>1;
}
ans %= m;
return ans;
}
signed main()
{
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
for(int i=1;i<=n;++i) scanf("%lld",&a[i]),p[i]=i;
for(int i=1;i<=n;++i) {
scanf("%lld",&b[i]);
int fx=find(a[i]),fy=find(b[i]);
if(fx!=fy){
p[fx]=fy;
}
}
int ans=0;
for(int i=1;i<n;++i){
int fx=find(i),fy=find(i+1);
if(fx!=fy){
ans++;
p[fx]=fy;
}
}
printf("%lld\n",qbow(2,ans+1,mod));
}
}

随机推荐

  1. 一次oracle行级锁导致的问题

    分析问题:我在plsql/developer是用的system用户连接的数据库,而在crt用  sqlplus / as  sysdba 连接数据库,是sys用户.现在在plsql/developer ...

  2. WAMP apache 无法运行 报错could not execult menu item

    wamp:could not execult menu item (internal error)[exception]counld not perform service action:服务器没有及 ...

  3. Cisco命令中login和login local的区别

    login是开启远程登录密码验证,login local不但要求密码,还要求提供用户名 如果同时设置login和login local,login local有效 (config-line)#line ...

  4. Android BottomNavigation底部导航栏使用

    原文地址: Android BottomNavigation底部导航栏使用 - Stars-One的杂货小窝 基本使用 本文侧重点记录一些特殊的样式设置,所以基本使用这里就简单概述一下,详细图文可以去 ...

  5. 检测到 #include 错误。请更新 includePath。已为此翻译单元 禁用波形曲线

    也有可能是VSCode抽风了 重启就好

  6. TCP和UDP的应用场景

    传输层的两个协议,TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议),有各自的应用场景. TCP ...

  7. Mybatis(生命周期 )

    生命周期和作用域 生命周期和作用域,是至关重要的,因为错误的使用导致非常严重并发问题 对象声明周期和依赖注入框架 依赖注入框架可以创建线程安全的,基于事务的SqlSession和映射器,并将它们直接注 ...

  8. redis 中的 list

    lpush K1 V1 V2 V3   左边加入list rpush k1 v1 v2 v3 右边加入list lpop k1 左边吐出一个值 rpop k1 右边吐出一个值 lrange k1 0 ...

  9. Canvas好难,如何让研发低成本实现Web端流程图设计功能

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 相信大家在职场中经常会用到流程图,在互联网行业,绘制流程 ...

  10. asset module type 替代 loader 处理图片字体等文件资源

    前面文章中 体验了webpack的打包 .解析css资源 ,接下来看看项目中常用到的图片.字体.文件该怎么处理吧~ 项目路径如下,在上一篇 解析css资源 项目基础上增加了一些文件 demo ├─ s ...