传送门

倍增并查集。

//Twenty
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
using namespace std;
typedef long long LL;
const int maxn=1e5+;
const int mod=1e9+;
int f[maxn][],n,m; void read(int &ret) {
int f=; ret=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) ret=ret*+ch-''; ret*=f;
} int find(int x,int l) {
return x==f[x][l]?x:f[x][l]=find(f[x][l],l);
} void link(int u,int v,int l) {
if(find(u,l)==find(v,l)) return;
f[f[u][l]][l]=f[v][l];
} void init() {
read(n); read(m);
for(int i=;i<=n;i++)
for(int j=;j<;j++)
f[i][j]=i;
for(int i=;i<=m;i++) {
int a,b,c,d;
read(a); read(b);
read(c); read(d);
for(int j=;j>=;j--) {
if(a+(<<j)-<=b) {
link(a,c,j);
a+=(<<j);
c+=(<<j);
}
}
}
for(int j=;j>=;j--) {
for(int i=;(i+(<<j)-)<=n;i++) {
link(i,find(i,j),j-);
link(i+(<<j-),f[i][j]+(<<j-),j-);
}
}
int cnt=;
LL ans=;
for(int i=;i<=n;i++)
if(find(i,)==i) cnt++;
for(int i=;i<cnt;i++) {
(ans*=)%=mod;
}
printf("%lld\n",ans);
} int main()
{
init();
return ;
}

最新文章

  1. 接触PHP快4个月
  2. Working with Binary Data in Python
  3. JSP 基础语法
  4. [drp 2]String、StringBuffer和StringBuilder的区别
  5. Ganglia监控搭建
  6. 妹子图太多怎么看才好,Swing来支招
  7. python 杨辉三角 算法实现
  8. IntelliJ IDEA 控制台 乱码 有效解决办法
  9. linux shell编程指南第十八章------控制流结构
  10. Swift中文手册 -- The Basics
  11. 微信小程序-video详解
  12. Linux Debian 7部署LEMP(Linux+Nginx+MySQL+PHP)网站环境
  13. linux脚本Shell之awk详解(二)
  14. Pythagorean Triples
  15. eclipse安装cucumber插件
  16. LeetCode专题-Python实现之第21题:Merge Two Sorted Lists
  17. js中this的绑定规则及优先级
  18. eslint 关于CRLF或者LF报错
  19. Eclipse中Project的属性Deployment Assembly(部署程序集)消失了,不存在了,去哪儿了
  20. SQL中exsit和in

热门文章

  1. 透视jvm之垃圾回收
  2. Foundation框架系列-NSArray
  3. 企业网盘居然支持高速局域网文件传输工具(速度可达20M)
  4. 判断JS对象是否为空的几种方式
  5. mysql主从跳过错误
  6. jmeter参数化遇到的问题
  7. SpringBoot学习笔记(五):SpringBoot集成lombok工具、SpringBoot集成Shiro安全框架
  8. Linux 的文件和目录管理类命令
  9. 纯 CSS 实现实心三角形和空心三角形
  10. Python2.7安装matplotlib、numpy