【洛谷3295】[SCOI2016]萌萌哒
2024-09-06 00:45:55
倍增并查集。
//Twenty
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
using namespace std;
typedef long long LL;
const int maxn=1e5+;
const int mod=1e9+;
int f[maxn][],n,m; void read(int &ret) {
int f=; ret=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) ret=ret*+ch-''; ret*=f;
} int find(int x,int l) {
return x==f[x][l]?x:f[x][l]=find(f[x][l],l);
} void link(int u,int v,int l) {
if(find(u,l)==find(v,l)) return;
f[f[u][l]][l]=f[v][l];
} void init() {
read(n); read(m);
for(int i=;i<=n;i++)
for(int j=;j<;j++)
f[i][j]=i;
for(int i=;i<=m;i++) {
int a,b,c,d;
read(a); read(b);
read(c); read(d);
for(int j=;j>=;j--) {
if(a+(<<j)-<=b) {
link(a,c,j);
a+=(<<j);
c+=(<<j);
}
}
}
for(int j=;j>=;j--) {
for(int i=;(i+(<<j)-)<=n;i++) {
link(i,find(i,j),j-);
link(i+(<<j-),f[i][j]+(<<j-),j-);
}
}
int cnt=;
LL ans=;
for(int i=;i<=n;i++)
if(find(i,)==i) cnt++;
for(int i=;i<cnt;i++) {
(ans*=)%=mod;
}
printf("%lld\n",ans);
} int main()
{
init();
return ;
}
最新文章
- 接触PHP快4个月
- Working with Binary Data in Python
- JSP 基础语法
- [drp 2]String、StringBuffer和StringBuilder的区别
- Ganglia监控搭建
- 妹子图太多怎么看才好,Swing来支招
- python 杨辉三角 算法实现
- IntelliJ IDEA 控制台 乱码 有效解决办法
- linux shell编程指南第十八章------控制流结构
- Swift中文手册 -- The Basics
- 微信小程序-video详解
- Linux Debian 7部署LEMP(Linux+Nginx+MySQL+PHP)网站环境
- linux脚本Shell之awk详解(二)
- Pythagorean Triples
- eclipse安装cucumber插件
- LeetCode专题-Python实现之第21题:Merge Two Sorted Lists
- js中this的绑定规则及优先级
- eslint 关于CRLF或者LF报错
- Eclipse中Project的属性Deployment Assembly(部署程序集)消失了,不存在了,去哪儿了
- SQL中exsit和in