【BZOJ4569】萌萌哒,ST表+并查集
Time:2016.08.03
Author:xiaoyimi
转载注明出处谢谢
传送门
思路:
sunshine爷模拟题之一
自认计数类问题还可以的我找了半天规律也只会50分做法:
对于每个询问直接枚举修改,并查集维护,复杂度O(nm)O(nm)
“有没有能够快速维护多个并查集的数据结构啊”——Yveh
因而正解就是ST表维护并查集
每次合并是自顶而下的,一直下放直到当前要合并的两部分已被合并过。
复杂度最多是神奇的O(mlogn)O(mlogn)
答案就是9∗10集合数−19*10^{集合数-1}
Orz YJQ SC省选时现场AK
注意:n=1时答案为10
代码:
#include<cstdio>
#include<iostream>
#include<cmath>
#define M 100001
#define mo 1000000007
#define LL long long
using namespace std;
int n,m,l1,l2,r1,r2;
int fa[17][M];
bool vis[M];
int in()
{int t=0;char ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9') t=(t<<3)+(t<<1)+ch-48,ch=getchar();return t;
}
int find(int x,int y)
{if (fa[x][y]!=y)fa[x][y]=find(x,fa[x][y]);return fa[x][y];
}
void unions(int x,int y,int p)
{int f1=find(p,x),f2=find(p,y);if (f1==f2) return;fa[p][f1]=f2;if (!p) return;p--;unions(x,y,p);unions(x+(1<<p),y+(1<<p),p);
}
int qr(int x,int y)
{int t=1;for (;y;x=(LL)x*x%mo,y>>=1)if (y&1) t=(LL)t*x%mo;return t;
}
main()
{n=in();m=in();if (n==1) return printf("10"),0;for (int i=1;i<=n;i++)for (int j=0;i+(1<<j)-1<=n;j++)fa[j][i]=i;while (m--){l1=in();r1=in();l2=in();r2=in();int t=log2(r1-l1+1);unions(l1,l2,t);unions(r1-(1<<t)+1,r2-(1<<t)+1,t);}int ans=-1;for (int i=1;i<=n;i++)if (!vis[find(0,i)]) vis[fa[0][i]]=1,ans++;printf("%d",9*qr(10,ans)%mo);
}
【BZOJ4569】萌萌哒,ST表+并查集相关推荐
- P3295-[SCOI2016]萌萌哒【ST表,并查集】
正题 题目链接:https://www.luogu.com.cn/problem/P3295 题目大意 一个nnn位的数字,mmm个条件给出两个完全相同的区间,求可能的数字数量. 解题思路 其实就是区 ...
- 洛谷P3295 [SCOI2016]萌萌哒(倍增+并查集)
传送门 思路太妙了啊-- 容易才怪想到暴力,把区间内的每一个数字用并查集维护相等,然后设最后总共有$k$个并查集,那么答案就是$9*10^{k-1}$(因为第一位不能为0) 考虑倍增.我们设$f[i] ...
- 牛客多校8 - All-Star Game(线段树分治+并查集按秩合并的撤销操作)
题目链接:点击查看 题目大意:有 n 个球员和 m 个球迷,一个球员可能是多个球迷的粉丝,需要选择最少的球员进行比赛,使得所有的球迷都愿意观看(对于每个球迷来说,都有至少一个其喜欢的球员入选比赛) 对 ...
- BZOJ 4736 温暖会指引我们前行 LCT+最优生成树+并查集
题目链接:http://uoj.ac/problem/274 题意概述: 没什么好概述的......概述了题意就知道怎么做了......我懒嘛 分析: 就是用lct维护最大生成树. 然后如果去UOJ上 ...
- bzoj4569 [Scoi2016]萌萌哒 并查集+st表
这个题非常巧妙,它描述了一种新的延迟标记关系.. 正常的线段树是用n*4的空间描述一个序列,所以对于一段区间,有可能会有log个点对应一个点 而线段树是利用尽量小的空间使查询变为log st表是nlo ...
- NOIp 数据结构专题总结 (1):STL、堆、并查集、ST表、Hash表
系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) STL structure std::vector #include <vector> std::vec ...
- 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- 基础数据结构(二):字典树、并查集、堆、哈希表、字符串的哈希方式、STL的常见容器及其接口
文章目录 一.字典树Trie 1 原理 2 Trie字符串统计 3 [LeetCode 208. 实现 Trie (前缀树)](https://leetcode-cn.com/problems/imp ...
- 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题
layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...
最新文章
- python生成一段时间
- 干货丨从线性回归到无监督学习,数据科学家需要掌握的十大统计技术
- 英语对计算机人才的重要性,英语对计算机专业的重要性及如何提高英语水平
- golang beego安装及入门示例
- try_catch_异常处理的第二种方式,自己处理异常
- bitmap与memoryStream转换bug
- 在JAX-RS中使用@Context [第1部分]
- form表单用js提前执行函数若不成功则不提交_面试必会的重复提交 8 种解决方案!...
- 40岁的程序员还能找到工作吗_学会了Vue就能找到前端工作吗
- github 上 Fork 别人的项目后的常用的操作指南
- 记一次使用 vue-admin-template 的优化历程
- vue 检测ie版本_vue 兼容低版本ie浏览器
- CentOS 7.6环境设置Redis开机自启动
- 美服fgo显示服务器异常,FGO日服美服错误代码合集_FGO日服美服错误代码汇总_牛游戏网...
- HBase的rowKey设计技巧
- java面试-多线程常见面试题
- 面试题目之:说出至少4种vue当中的指令和它的用法?
- 数字图像处理大作业实验报告
- 简述c语言中break的作用,c语言break什么意思?
- 秒杀限制人群,如何设计秒杀服务的限流策略?
热门文章
- 华为云ModelArts图深度学习,学习知识还能考取微认证
- 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作
- java猜拳游戏代码_猜拳游戏 - java代码库 - 云代码
- 相机内参_相机标定(张正友标定算法)解读与实战一
- Spark之StructuredStreaming
- 外国人怎么看祖冲之量子计算机,我国“祖冲之号”量子计算机再次刷新纪录:1.2 小时完成超算 8 年计算量...
- mysql 创建函数_MySQL文件及目录权限设置分析-爱可生
- 弹簧触摸开关原理图_电梯弹簧抱闸调整
- 【Spark】Spark应用执行机制
- python文件のpandas操作