题解

这个题好妙啊

首先我们发现,如果我们可以暴力,就是把相同的元素拿并查集合起来,最后统计集合个数\(cnt\)

答案是\(9\*10^{cnt - 1}\)

然而我们做不到= =

我们可以用倍增的思想,类似st表,一次合并两个长度为\(2^l\)的区间

然后再从区间长度最长往下下放,从长到短遍历,就下放一层,之后会继续遍历到这层然后下放

最后统计集合个数,复杂度是\(O(n \log n)\)的

代码

#include <bits/stdc++.h>
//#define ivorysi
#define MAXN 100005
typedef long long int64;
typedef unsigned int u32;
using namespace std;
const int MOD = 1000000007;
int fa[MAXN * 25];
int st[MAXN][20],cnt = 0;
int log_2[MAXN],n,m;
int lc[MAXN * 25],rc[MAXN * 25];
int getfa(int x) {return x == fa[x] ? x : fa[x] = getfa(fa[x]);}
void merge(int x,int y) {
if(getfa(x) == getfa(y)) return;
fa[getfa(x)] = getfa(y);
}
void Init() {
scanf("%d%d",&n,&m);
for(int i = 2 ; i <= n ; ++i) log_2[i] = log_2[i / 2] + 1;
for(int j = log_2[n] ; j >= 0 ; --j) {
for(int i = 1 ; i + (1 << j) - 1 <= n ; ++i) {
st[i][j] = ++cnt;
fa[cnt] = cnt;
}
}
for(int j = 1 ; j <= log_2[n] ; ++j) {
for(int i = 1 ; i + (1 << j) - 1 <= n ; ++i) {
lc[st[i][j]] = st[i][j - 1];
rc[st[i][j]] = st[i + (1 << j - 1)][j - 1];
}
}
}
void Solve() {
int s1,e1,s2,e2;
while(m--) {
scanf("%d%d%d%d",&s1,&e1,&s2,&e2);
int l = log_2[e1 - s1 + 1];
merge(st[s1][l],st[s2][l]);
merge(st[e1 - (1 << l) + 1][l],st[e2 - (1 << l) + 1][l]);
}
for(int j = 1; j <= cnt; ++j) {
if(!lc[j] || !rc[j]) continue;
int t;
if((t = getfa(j)) != j) {
merge(lc[j],lc[t]);
merge(rc[j],rc[t]);
}
}
int sum = 0;
for(int i = 1 ; i <= n ; ++i) {
if(getfa(st[i][0]) == st[i][0]) ++sum;
}
int64 ans = 9;
for(int i = 1 ; i < sum ; ++i) ans = ans * 10 % MOD;
printf("%lld\n",ans);
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Init();
Solve();
}

【LOJ】#2014. 「SCOI2016」萌萌哒的更多相关文章

  1. LOJ#2014「SCOI2016」萌萌哒(倍增,并查集优化连边)

    题面 点此看题 题意很明白,就不转述了吧. 题解 题目相当于告诉了我们若干等量关系,每个限制 l 1 , r 1 , l 2 , r 2 \tt l_1,r_1,l_2,r_2 l1​,r1​,l2​ ...

  2. 「SCOI2016」萌萌哒 解题报告

    「SCOI2016」萌萌哒 这思路厉害啊.. 容易发现有个暴力是并查集 然后我想了半天线段树优化无果 然后正解是倍增优化并查集 有这个思路就简单了,就是开一个并查集代表每个开头\(i\)每个长\(2^ ...

  3. loj#2013. 「SCOI2016」幸运数字 点分治/线性基

    题目链接 loj#2013. 「SCOI2016」幸运数字 题解 和树上路径有管...点分治吧 把询问挂到点上 求出重心后,求出重心到每个点路径上的数的线性基 对于重心为lca的合并寻味,否则标记下传 ...

  4. loj#2015. 「SCOI2016」妖怪 凸函数/三分

    题目链接 loj#2015. 「SCOI2016」妖怪 题解 对于每一项展开 的到\(atk+\frac{dnf}{b}a + dnf + \frac{atk}{a} b\) 令$T = \frac{ ...

  5. loj#2016. 「SCOI2016」美味

    题目链接 loj#2016. 「SCOI2016」美味 题解 对于不带x的怎么做....可持久化trie树 对于带x,和trie树一样贪心 对于答案的二进制位,从高往低位贪心, 二进制可以表示所有的数 ...

  6. loj#2012. 「SCOI2016」背单词

    题目链接 loj#2012. 「SCOI2016」背单词 题解 题面描述有点不清楚. 考虑贪心 type1的花费一定不会是优的,不考虑, 所以先把后缀填进去,对于反串建trie树, 先填父亲再填儿子, ...

  7. 「SCOI2016」萌萌哒

    「SCOI2016」萌萌哒 题目描述 一个长度为 \(n\) 的大数,用 \(S_1S_2S_3 \ldots S_n\) 表示,其中 \(S_i\) 表示数的第 \(i\) 位,\(S_1\) 是数 ...

  8. loj #2013. 「SCOI2016」幸运数字

    #2013. 「SCOI2016」幸运数字 题目描述 A 国共有 n nn 座城市,这些城市由 n−1 n - 1n−1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以 ...

  9. LOJ #2013「SCOI2016」幸运数字

    时限为什么这么大啊 明摆着放多$ log$的做法过啊$QAQ$ LOJ #2013 题意 有$ Q$次询问,每次询问树上一条链,点有点权,你需要选择一些链上的点使得异或和尽量大 点数$ \leq 2* ...

随机推荐

  1. 【题解】Points, Lines and Ready-made Titles Codeforces 871C 图论

    Prelude 真是一道好题,然而比赛的时候花了太多时间在B题上,没时间想这个了QAQ. 题目链接:萌萌哒传送门(.^▽^) Solution 观察样例和样例解释,我们发现,假如有四个点,恰好占据在某 ...

  2. 简单去除exe自校验方式

    简单去除exe自校验方式 一.      自校验定义: 这些程序会检查自己有没有被修改,如果发现被修改的话,便会离开或进行其它动作.基本的校检方法包括 checksum, 检查大小, 检查跳转代码,等 ...

  3. tomcat maven插件启动报错tomcat-users.xml cannot be read

    tomcat maven插件启动报错tomcat-users.xml cannot be read [ERROR] Failed to execute goal org.codehaus.mojo:t ...

  4. Debian最完美安装flash的教程//适用于所有linux版本

    话说不管是新手还是老手,都离不开flash.没有flash的支持,菜鸟们也少了一些把玩linux的动力. flash有很多安装的方法,不过性能相差很大.这里的缘由就不重要了. 下面我介绍在chromi ...

  5. CF767 C.Garland DFS

    LINK 题意:给定一棵树,每个节点拥有权值,问能否找到两个点,断开它们与父节点的边能使树分成权值和相等的三部分.权值可以为负 思路:进行两遍DFS,第一遍找最深的子树和为sum/3的节点,标记掉找到 ...

  6. 2015/11/1用Python写游戏,pygame入门(1):pygame的安装

    这两天学习数据结构和算法,有时感觉并不如直接做项目来的有趣.刚刚学完python的基本使用,现在刚好趁热打铁做个小项目. 由于本人一直很想制作一款游戏,就想使用Python制作一个基础的游戏.搜了一下 ...

  7. C++ 的getline问题

    在用c++的getline函数的时候碰到两个问题,总结如下: 1.有时候写程序的时候我们会发现getline(cin,str);这样的语句是不会执行,而是直接跳过的, 一般的解决方法是getline一 ...

  8. Maven项目Eclipse启动时报错: java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener

    Eclipse中启动Maven项目时报如下错误: 严重: Error configuring application listener of class org.springframework.web ...

  9. 【BZOJ】4753: [Jsoi2016]最佳团体 01分数规划+树上背包

    [题意]n个人,每个人有价值ai和代价bi和一个依赖对象ri<i,选择 i 时 ri 也必须选择(ri=0时不依赖),求选择k个人使得Σai/Σbi最大.n<=2500,ai,bi< ...

  10. Let's Encrypt 免费通配 https 签名证书 安装方法

    安装环境 centOs7 主要通过 acme.sh (bash脚本)来注册签名 git地址:https://github.com/Neilpang/acme.sh 申请证书流程 1.申请证书-> ...