CF1534C
题目简化和分析:
涉及算法:并查集。
为什么要使用并查集:
- 因为交换只能是列交换,并且保证不与别的重复
- 我们通过观察题目发现,某些列之间互为限制关系
- 即如果某列序列排序方式固定,则被限制的列也为固定的
- 此时我们会发现只有两种(一个互相限制的集合列)
既然如此,我们将这每个集合看作为一个联通分量。
用并查集枚举有几个连通分量。
特别的,一列中的两个数肯定互相限制。
如果我们有 \(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));
}
}
随机推荐
- CMU15-445 Project3 Query Execution心得
Project3 Query Execution 心得 一.概述 首先要说:这个 project很有趣很硬核!从这个 project 开始才感觉自己在数据库方面真正成长了! 第一个 project : ...
- CentOS上安装Redis的两种方式
今天小编给大家介绍下,如何在CentOS上安装Redis.通常有两种方式:第一种是通过下载源码并编译来安装,第二种是通过仓库直接安装.相较而言,第二种方式更直截了当,但小编更倾向第一种. 一.通过源码 ...
- zabbix system.run
Zabbix的system.run是一个主动模式的监控项,它允许用户在Zabbix服务器上执行自定义的命令或脚本,并获取执行结果作为监控数据. system.run监控项的配置包括以下几个关键参数: ...
- 关于在modelsim中 仿真 ROM IP核 读取不了 mif文件 的解决方法
在modelsim中 仿真 ROM IP核 读取不了 mif文件 . 出现状况: 显示无法打开 rom_8x256.mif 文件 .点开modelsim下面文件的内存列表,可看到内存全为0. 查看自身 ...
- 隐藏tkinter弹出的创库
1 import tkinter as tk 2 root = tk.Tk() 3 root.withdraw()
- 深入理解Java虚拟机(JVM):原理、结构与性能优化
1. 介绍 Java虚拟机(JVM)是Java程序的核心执行引擎,负责将Java源代码编译成可执行的字节码,并在运行时负责解释执行字节码或将其编译成本地机器代码.本文将深入探讨JVM的原理.结构以及性 ...
- oracle数据备份和还原
前言 用户:userzs 密码:passzs IP和端口:192.168.0.10:1521/orcl oracle版本:11和12 oracle自带exp和expdp程序用于数据导出备份,imp和i ...
- Spring Cloud Gateway Actuator API SpEL表达式注入命令执行漏洞(CVE-2022-22947)
描述: Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的 API 网关,它旨在为微服务架构提供一种简单.有效.统一的 API 路由 ...
- 《高级程序员 面试攻略 》rabitmq rcoketmq kafka的区别 和应用场景
RabbitMQ.RocketMQ 和 Kafka 都是流行的消息中间件系统,用于实现分布式应用程序之间的异步通信.虽然它们都有类似的目标,但在设计和应用场景上存在一些区别. 1. RabbitMQ( ...
- ArcMap时间滑块绘制遥感影像的动态变化过程
本文介绍基于ArcMap软件,利用时间滑块功能,对大量多时相栅格遥感影像数据进行动态显示,并生成视频或动图的方法. 首先,我们需要在ArcMap软件中新建一个镶嵌数据集,并将全部的多时像遥感影 ...