Description

历经千辛万苦,ddddddpppppp 终于找到了IBN5100。 dp 事先了解到SERN 共有T 个密码,每个密码是一个长度为N 的01 串,他要利用IBN5100 的特殊功能破解SERN 的密码。 初始时,IBN5100 中的串每个位置都是0。 这台特殊的IBN5100 还提供了M 个区间[Li,Ri],每次操作是从给定区间中选 择其中一个区间[Li,Ri],将当前01 串[Li,Ri]的位置上的数字全部取反。 dp 可以执行上述操作任意次。为了破解出密码,dp 想知道这个01 串最多有多 少种可能。 
由于答案可能很大,所以你只需要告诉 dp 模(10^9+7)后的答案即可。 
注意:每次破解都是独立的。

Input

第一行,一个整数T 表示一共T 组数据。 
每组数据第一行,两个整数N,M,分别表示密码串长度和区间个数。 
接下来M 行,第i 行两个整数Li,Ri 表示一个区间[Li,Ri]。

Output

每组数据一行,一个整数表示所有的可能,答案对(10^9+7)取模。

Sample Input


3 3 
1 1 
2 2 
3 3 
5 2 
1 2 
4 5

Sample Output


4

Hint

【样例解释】 
第一组数据:每个位置都可以单个修改,所以所有长度为3 的01 串都有可能,即2^3=8 种可能。 
第二组数据的四种可能如下: 
1.不操作:00000 
2.选择区间[1,2]:11000 
3.选择区间[4,5]:00011 
4.先选择区间[1,2]再选择[4,5]:11011

【数据范围】 
对于30%的数据,N,M ≤ 10 
对于60%的数据,N ≤ 10000000 , M ≤ 20 
对于100%的数据,N ≤ 10000000 , M ≤ 100000 ,1 ≤ Li ≤ Ri ≤ N , T≤ 10

 
题解:
     这个题目很巧秒,显然如果区间与区间之间没有相互之间影响,那么答案就会是2^n次方,也就是每个区间有乘二的贡献,因为既然你相互不影响,那我这个区间就有反和不反两种情况,但既然会影响所以我们要想办法把本质不同的组合给筛选出来。
  就是一个区间或者一个组合如果能被多个区间或者组合所取代,那么他们的本质就是一样的,所以我们只要乘一次二就可了,怎么筛选,用并查集连边判重就可以了。
 
代码:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<cstring>
#define ll long long
#define mod 1000000007;
const int MAXN=;
using namespace std;
int fa[MAXN],l[MAXN],r[MAXN],v[MAXN];
int n,m,t;
int num=; int find(int x){
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
} void cl(){
memset(fa,,sizeof(fa));
memset(l,,sizeof(l));
memset(r,,sizeof(r));
memset(v,,sizeof(v));
} int main(){
scanf("%d",&t);
while(t--){
cl();
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
scanf("%d%d",&l[i],&r[i]);r[i]++;
}
for(int i=;i<=n+;i++) fa[i]=i;
ll ans=;
for(int i=;i<=m;i++){
int x=find(l[i]),y=find(r[i]);
if(x==y) continue;
ans*=;ans%=mod;
fa[x]=y;
}
printf("%lld\n",ans);
}
}
…………

【JZOJ4807】破解的更多相关文章

  1. Kali对wifi的破解记录

    好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...

  2. 对抗密码破解 —— Web 前端慢 Hash

    (更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...

  3. Syscan360会议胸牌破解揭秘

    Syscan360会议胸牌破解揭秘 背景 有幸参加今年11月份的上海Syscan360安全会议,会议期间有一个亮点就是360的独角兽团队设计了一款电子badge(胸牌)供参加人员进行破解尝试,类似于美 ...

  4. “不给力啊,老湿!”:RSA加密与破解

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 加密和解密是自古就有技术了.经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫 ...

  5. C# 破解 Reflector8.5

    一.分析 破解.net .dll,可以使用reflector,但官方提供的reflector是需要购买的,因此,破解reflector势在必行. 二.破解Reflector具体步骤 下面为详细的破解步 ...

  6. CorelDRAW X8 如何破解激活(附国际版安装包+激活工具) 2016-12-15

    之前有位搞平面的好友“小瘦”说CDR X8无法破解,只能用X7.呃……呃……呃……好像是的 其实CDR8难激活主要在于一个点“没有离线激活了,只可以在线激活”,逆天不是专供逆向的,当然没能力去破解,这 ...

  7. 破解SQLServer for Linux预览版的3.5GB内存限制 (UBUNTU篇)

    在上一篇中我提到了如何破解RHEL上SQLServer的内存大小限制,但是Ubuntu上还有一道检查 这篇我将会讲解如何在3.5GB以下内存的Ubuntu中安装和运行SQLServer for Lin ...

  8. 破解SQLServer for Linux预览版的3.5GB内存限制 (RHEL篇)

    微软发布了SQLServer for Linux,但是安装竟然需要3.5GB内存,这让大部分云主机用户都没办法尝试这个新东西 这篇我将讲解如何破解这个内存限制 要看关键的可以直接跳到第6步,只需要替换 ...

  9. 微信小程序IDE(微信web开发者工具)安装、破解手册

    1.IDE下载 微信web开发者工具,本人是用的windows 10 x64系统,用到以下两个版本的IDE安装工具与一个破解工具包: wechat_web_devtools_0.7.0_x64.exe ...

随机推荐

  1. Python远程连接MySQL数据库

    使用Python连接数据库首先需要安装Python的数据库驱动. 我的本地只装了Python,并没有装MySQL,当我使用命令: sudo pip install mysql-python 安装驱动( ...

  2. 【2】KNN:约会对象分类器

    前言 这是一个KNN算法的应用实例,参考<机器学习实战>中的datingTestSet2.txt的数据集. 可以通过对不同约会对象的特征进行分析然后自动得出以下三种结论: 不喜欢的 有点魅 ...

  3. C#客户端程序Visual Stadio远程调试

    一,需求来源 在开发过程中,可能会要使用Win7 ,Win8 ,Win10等不同版本的系统去做兼容性调试,也有时候会去针对特别的显卡,无线网卡等等硬件设备的机器做优化,有一种较优的方案,那就是使用Vi ...

  4. UI自动化测试养成记

    <selenium自动化测试实战>PDF文档下载:https://pan.baidu.com/s/16dt8qPi-C4BOgKe6snAA0A 这几个月我都干了些什么? 当我打算写一本& ...

  5. ubuntu16.04设置bind9.10.3的chroot运行

    重点:1)系统是ubuntu的16.04 bind9.10.3 2)确保你的系统是没问题的,我之前的16.04有问题,在虚拟机上怎么都操作都不行, 在/var/log/syslog可以看到:could ...

  6. android Action中的data属性

    (2) 根据Action和Data匹配 <activity android:name=".MyActivityTwo" android:label="@string ...

  7. glusterfs详解及kubernetes 搭建heketi-glusterfs

    本文包含: gluster各存储卷详解.创建及使用 gluster-kubernetes搭建glusterfs存储 前言 传统的运维中,往往需要管理员手动先在存储集群分配空间,然后才能挂载到应用中去. ...

  8. java动态代理之CGLIB实现

    动态代理(CGlib 与连接池的案例) Cglib代理: 针对类来实现代理,对指定目标 产生一个子类 通过方法拦截技术拦截所有父类方法的调用. 我们要使用cglib代理必须引入 cglib的jar包 ...

  9. MOOC C++笔记(四):运算符重载

    第四周:运算符重载 基本概念 运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为. 运算符重载的目的是:扩展C++中提供的运算 ...

  10. [LeetCode] 由 “找零钱" 所想

    Ref: [Optimization] Dynamic programming[寻找子问题] Ref: [Optimization] Advanced Dynamic programming[优于re ...