【题解】SCOI2006萌萌哒
看到这题,首先想到\(n^{2}\)的暴力,就是用并查集暴力合并两个相等的点。但由于这样会导致反复地访问同一个操作,显然是不能够的。于是我们可以联想这题的特殊性质,就是互相连变的点都是一段一段的区间。然后很自然地联想到线段树分解优化,坚定地想了一个半小时还多,然后很自然地挂了。天知道我是怎么把一个暴力的复杂度给生生算出 \(nlog^{2}m\) 的复杂度来的……(⊙﹏⊙)
线段树的区间分割并不是很灵活,而且完全没有改变暴力的本质。于是灰溜溜的去看题解,倍增?恍然大悟一般。是啊,分解区间我们还有倍增呀~我们可以用 \(f[i][j]\) 表示 \(i\) 与向后的 \(2^{j}\) 个点,我们就可以\(O(1))\)地完成区间的合并了。最后,由于如果 \(f[i][j]\) 与 \(f[k][j]\) 是相等的,那么他们下面的所有倍增区间也都是相等的。我们类似 push_down 操作,让儿子继承一下父亲的集合关系即可。受教啦~
#include <bits/stdc++.h>
using namespace std;
#define maxn 100500
#define mod 1000000007
#define LL long long
int n, m, cnt, fa[maxn * ];
int lc[maxn * ], rc[maxn * ];
int bit[], Log[maxn], f[maxn][]; int read()
{
int x = , k = ;
char c; c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void init()
{
bit[] = ; for(int i = ; i < ; i ++) bit[i] = bit[i - ] << ;
Log[] = -; for(int i = ; i <= n; i ++) Log[i] = Log[i >> ] + ;
for(int j = ; bit[j] <= n; j ++)
for(int i = ; i + bit[j] - <= n; i ++)
{
f[i][j] = ++ cnt;
if(j)
{
lc[cnt] = f[i][j - ];
rc[cnt] = f[i + bit[j - ]][j - ];
}
}
for(int i = ; i <= cnt; i ++) fa[i] = i;
} int find(int x) { return ((fa[x] == x) ? x : fa[x] = find(fa[x])); }
void merge(int x, int y)
{
x = find(x), y = find(y);
if(x != y) fa[x] = y;
} int main()
{
n = read(), m = read();
init();
for(int i = ; i <= m; i ++)
{
int l1 = read(), r1 = read(), l2 = read(), r2 = read();
int k = Log[r1 - l1 + ];
merge(f[l1][k], f[l2][k]);
merge(f[r1 - bit[k] + ][k], f[r2 - bit[k] + ][k]);
}
for(int i = cnt, tem; i > n; i --)
if((tem = find(i)) != i)
{
merge(lc[i], lc[tem]);
merge(rc[i], rc[tem]);
}
int ans = , base = ;
for(int i = ; i <= n; i ++) ans += (find(i) == i);
for(int i = ; i < ans; i ++) base = ((LL) base * 10LL) % mod;
printf("%d\n", base);
return ;
}
【题解】SCOI2006萌萌哒的更多相关文章
- ETO的公开赛T4《对抗水滴》 题解(BY 萌萌哒123456 )
题意: 给你一个\(n*n\)的矩阵A,其中有\(T\)个元素不为零.定义矩阵内元素\((x,y)\)的能量值 \(E[x][y]=\sum_{i=1}^{x}\sum_{j=1}^{y}[A[i][ ...
- ETO的公开赛T2《宏聚变》 题解(BY 萌萌哒123456 )
我们注意到这道题中最多有 $(n+q)$ 个数被加入,而每个数最多被删除一次,因此每次操作 $O(logn)$的复杂度是可以接受的. 我们对于$1..100000$之间每个数分别开一个set,维护这个 ...
- 1754: [Usaco2005 qua]Bull Math
1754: [Usaco2005 qua]Bull Math Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 398 Solved: 242[Submit ...
- 2272: [Usaco2011 Feb]Cowlphabet 奶牛文字
2272: [Usaco2011 Feb]Cowlphabet 奶牛文字 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 138 Solved: 97 ...
- 1593: [Usaco2008 Feb]Hotel 旅馆
1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 391 Solved: 228[Submit ...
- 1657: [Usaco2006 Mar]Mooo 奶牛的歌声
1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 526 Solved: 365[Submi ...
- 1821: [JSOI2010]Group 部落划分 Group
1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1308 Solved: 627[Su ...
- 1022: [SHOI2008]小约翰的游戏John
1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1322 Solved: 829[Submit][ ...
- P3295 萌萌哒 题解
题目 一个长度为n的大数,用\(S_1,S_2,S_3...S_n\)表示,其中\(S_i\)表示数的第\(i\)位,\(S_1\)是数的最高位,告诉你一些限制条件,每个条 件表示为四个数,\(l_1 ...
随机推荐
- 数据爬取后台(PHP+Python)联合作战
一. 项目声明 本项目从前端,到后台,以及分布式数据抓取,乃我一个人所写,因此项目并不太完善!在语义分析以及数据处理上并不能尽如意.但是极大的减轻了编辑的工作量! 二. 项目所用技术 本项目中前端采用 ...
- Spring的定时任务(任务调度)<task:scheduled-tasks>
Spring内部有一个task是Spring自带的一个设定时间自动任务调度,提供了两种方式进行配置,一种是注解的方式,而另外一种就是XML配置方式了.注解方式比较简洁,XML配置方式相对而言有些繁琐, ...
- Vue框架核心之数据劫持
本文来自网易云社区. 前瞻 当前前端界空前繁荣,各种框架横空出世,包括各类mvvm框架横行霸道,比如Angular.Regular.Vue.React等等,它们最大的优点就是可以实现数据绑定,再也不需 ...
- 「日常训练」Regular Bridge(Codeforces Round 306 Div.2 D)
题意与分析 图论基础+思维题. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back #defi ...
- 只写Python一遍代码,就可以同时生成安卓及IOS的APP,真优秀
前言: 用Python写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择 我们使用kivy开发安卓APP,Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写 ...
- jdbc连接sql server2017进行简单的增、删、改、查操作
这几天刚做完数据库的课程设计,来稍微总结一下如何通过jdbc访问sql server数据库进行简单的增删改查操作.在连接之前,需要简单地配置一下,包括下载对应jdk版本的驱动,设置环境变量等等.相关配 ...
- Linux内核设计笔记12——内存管理
内存管理学习笔记 页 页是内核管理内存的基本单位,内存管理单元(MMU,管理内存并把虚拟地址转化为物理地址的硬件)通常以页为单位进行处理,从虚拟内存的角度看,页就是最小单位. struct page{ ...
- Python3 Tkinter-Text
1.创建 from tkinter import * root=Tk() t=Text(root) t.pack() root.mainloop() 2.添加文本 from tkinter impor ...
- HADOOP (十一).安装hbase
下载安装包并解压设置hbase环境变量配置hbase-site.xml启动hbase检测hbase启动情况测试hbase shell 下载安装包并解压 https://mirrors.tuna.tsi ...
- nginx配置和网站的部署
环境: CentOS Linux release 7.3.1611 (Core) nginx version: nginx/1.13.4 PHP 5.4.16 (cli) (built: Nov 6 ...