$st表+并查集$

$考虑暴力方法:我们每次将对应相等的位置用并查集连起来,那么最终答案就是9*10^{连通块个数-1}$

$很明显上面这个办法过不去,问题在于重复次数太多了,如果一个区间已经对应相等了就不用再次连,用st表优化这个过程$

$每次向st表一样递归连接,分成log层,每层维护\frac{n}{logn}个并查集,代表区间,那么我们加入记忆化的思想,如果对应区间已经联通就返回,这个就是用并查集完成,否则继续递归进行这个过程。其实这里就是运用了记忆化的思想$

$那么很明显每层穿起来所有区间需要区间个数-1次,那么一共有nlogn个区间,复杂度也就是nlogn了$

$所以看见这种题就要考虑用一些方式记忆化从而降低复杂度$

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + , P = 1e9 + ;
int n, m;
int fa[][N], Log[N];
int find(int p, int x) {
return x == fa[p][x] ? x : fa[p][x] = find(p, fa[p][x]);
}
void merge(int k, int a, int b) {
int x = find(k, a), y = find(k, b);
if(x == y) {
return;
}
fa[k][x] = y;
if(!k) {
return;
}
merge(k - , a, b);
merge(k - , a + ( << k - ), b + ( << k - ));
}
int main() {
scanf("%d%d", &n, &m);
if(n == ) {
puts("");
return ;
}
for(int j = ; j <= ; ++j) {
for(int i = ; i + ( << j) - <= n; ++i) {
fa[j][i] = i;
}
}
for(int i = ; i <= n; ++i) {
Log[i] = Log[i >> ] + ;
}
while(m--) {
int a, b, c, d;
scanf("%d%d%d%d", &a, &b, &c, &d);
int t = Log[b - a + ];
merge(t, a, c);
merge(t, b - ( << t) + , d - ( << t) + );
}
long long ans = , f = ;
for(int i = ; i <= n; ++i) {
if(find(, i) == i) {
if(f) {
ans = ans * % P;
} else {
f = ;
}
}
}
printf("%lld\n", ans);
return ;
}

最新文章

  1. UIScrollView的封装
  2. Codeforces Round #381 (Div. 2)B. Alyona and flowers(水题)
  3. setNeedsDisplay和setNeedsLayout
  4. ab.exe使用
  5. 【JAVA集合框架之Map】
  6. Python学习 之 流程控制
  7. 解决Ubuntu和Windows的文件乱码问题(转载)
  8. Python之re模块
  9. LeetCode OJ -Happy Number
  10. Android中px、dp、sp的区别
  11. jmeter之beanshell提取json数据
  12. Centos 7.3 安装mysql5.7.19 各种调试就不多说了
  13. 查找算法的实现(C/C++实现)
  14. 阿里云对象存储OSS访问控制
  15. 2018-2019-2 网络对抗技术 20165206 Exp3 免杀原理与实践
  16. python opencv 读取USB摄像头的像素问题
  17. python 二叉树实现带括号的四则运算
  18. Ubuntu16.04多个版本GCC编译器的安装和切换
  19. MVC DropDownList
  20. Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

热门文章

  1. Spring Cloud(十二):Spring Cloud Zuul 限流详解(附源码)(转)
  2. .NET MVC 4 实现邮箱激活账户功能
  3. LeetCode120——Triangle
  4. 数据库MySQL经典面试题之SQL语句
  5. 总结一下vue调试的方法
  6. centos7 设置网络
  7. 未开启HugePages ORACLE session剧增时引起的一次悲剧
  8. 导入EXCEL 时间数据为小数 问题
  9. EasyRTMP实现将RTSP流转换成RTMP流实现RTSP直播转RTMP直播的功能
  10. root无权限删除 原因 进程 占用 文件