博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[SCOI2016]萌萌哒
阅读量:6229 次
发布时间:2019-06-21

本文共 1684 字,大约阅读时间需要 5 分钟。

Description

Solution

一个非常naive的想法就是并查集暴力维护哪些集合要填一样的数,最后统计有几个集合就行了。但是这样是\(O(n^2)\)的。

可以借鉴ST表的思想,每次只合并两个区间,然后下传同类关系就行。

Code

#include 
#include
#include
typedef long long ll;const int N = 1e5 + 10;const ll mod = 1e9 + 7;int fa[20][N], n, m, sz[20][N], L2[N];int find(const int &lvl, const int &x) { return fa[lvl][x] == x ? x : fa[lvl][x] = find(lvl, fa[lvl][x]);}void merge(const int &lvl, const int &x, const int &y) { int fx = find(lvl, x), fy = find(lvl, y); if (fx == fy) return; if (sz[lvl][fx] > sz[lvl][fy]) fa[lvl][fy] = fx; else fa[lvl][fx] = fy; if (sz[lvl][fx] == sz[lvl][fy]) sz[lvl][fy]++; return;}ll pow_mod(ll x, int p) { ll ans = 1; for (; p; p >>= 1, x = x * x % mod) if (p & 1) ans = ans * x % mod; return ans;}int main() { scanf("%d%d", &n, &m); int l1, r1, l2, r2; for (int i = 2; i <= n; ++i) L2[i] = L2[i >> 1] + 1; for (int i = 0; i <= L2[n] + 1; ++i) for (int j = 1; j <= n; ++j) fa[i][j] = j; for (int i = 1; i <= m; ++i) { scanf("%d%d%d%d", &l1, &r1, &l2, &r2); int len = L2[r1 - l1 + 1]; merge(len, l1, l2); merge(len, r1 - (1 << len) + 1, r2 - (1 << len) + 1); } for (int i = L2[n] + 1; i; --i) { for (int j = 1; j <= n; ++j) { merge(i - 1, j, find(i, j)); if (j + (1 << i - 1) <= n) merge(i - 1, j + (1 << i - 1), find(i, j) + (1 << i - 1)); } } int cnt = 0; for (int i = 1; i <= n; ++i) if (fa[0][i] == i) cnt++; printf("%lld\n", pow_mod(10LL, cnt - 1) * 9 % mod); return 0;}

转载于:https://www.cnblogs.com/wyxwyx/p/scoi2006mmd.html

你可能感兴趣的文章
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>
php cookie
查看>>
linux下redis安装
查看>>
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>
JavaScript 数据类型
查看>>
量子通信和大数据最有市场突破前景
查看>>
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
如何申请开通微信多客服功能
查看>>
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>
jquery的checkbox,radio,select等方法总结
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
Myeclipes快捷键
查看>>
ToRPC:一个双向RPC的Python实现
查看>>
我的友情链接
查看>>
nginx在reload时候报错invalid PID number
查看>>
神经网络和深度学习-第二周神经网络基础-第二节:Logistic回归
查看>>