Mushroom的区间 (并查集)
来源:互联网 发布:淘宝我的五星好评截图 编辑:程序博客网 时间:2024/06/01 09:02
Mushroom的区间
【题目描述】
Mushroom有一行数,初始时全部是0。现在Mushroom有m个区间[L,R],他希望用以下操作得到新的序列。
从m个给定区间中选择一个区间[s,t],把区间中的数对应元素全部翻转。(0变1,1变0)
请告诉Mushroom他能得到多少区间。(模10^9+7)
【输入格式】
第一行包含两个整数n,m。表示n个数和m个区间。
接下来m行是所表示的区间。
【输出格式】
一个整数,表示能得到的区间数。
【样例输入】
3 3
1 1
2 2
3 3
【样例输出】
8
【数据范围】
对于30%的数据,n,m<=20
对于60%的数据,n,m<=100
对于100%的数据,n,m<=100000
【样例解释】
每个位置都可以单个修改,所以有8种可能。
思路:
经过一系列神奇的推演,我们发现多一个区间,方案数就可以乘2。但是有一些区间是可以用其他区间表示的,那么我们怎么去判断一个区间是不是有效的呢??
经过一系列神奇的推演,我们发现可以用点的连通性解决问题。
对于区间[l,r],那么只需要把 l 和 r+1连接起来就表示这段区间已经可以表示了,如果后来的一个区间尝试加入一个区间并且这两个点是联通的,就说明这个区间已经可以被表示了。
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const int mod = 1000000007;const int N = 100005;int fa[N];int find(int x) { return fa[x]==x ? x:fa[x]=find(fa[x]); }inline bool union_find(int x, int y){ int t1 = find(x), t2 = find(y); if(t1 == t2) return false; fa[t2] = t1; return true;}int n, m;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int main(){ freopen ("seg.in", "r", stdin); freopen ("seg.out", "w", stdout); scanf("%d%d", &n, &m); for(register int i=1; i<=n; i++) fa[i] = i; int ans = 1; for(register int i=1; i<=m; i++){ int l, r; l = read(), r = read(); if(union_find(l, r+1)) (ans <<= 1) %= mod; } printf("%d", ans); return 0;}
阅读全文
0 0
- Mushroom的区间 (并查集)
- 【并查集】Mushroom的区间
- Mushroom的区间 题解
- 并查集-区间问题
- Parity game(代权并查集(区间))
- POJ1456贪心(set或者并查集区间合并)
- 1455 - Kingdom(并查集+线段树区间加减)
- vijos1112小胖的奇偶(并查集,区间转两端线段)
- 并查集快速查找区间没有被访问的节点
- 【bzoj 2102】 [HNOI2005]狡猾的商人 带权并查集维护区间和
- 每日一题(21)——区间重合检测(一)(普通区间合并&并查集)
- 编程之美--区间重合判断(并查集求解)
- HDU 3038 How Many Answers Are Wrong (带权并查集+区间判断)
- Wikioi 2492 树状数组+并查集(单点更新区间查询)
- UVALive 4730 Kingdom(线段树区间修改+并查集)
- nyoj 856 华山论剑 (并查集or线段树区间点更新)
- HDU 5361 In Touch(并查集实现区间删除)
- 蓝桥杯 PREV-7 连号区间数(并查集)
- C++复习第一天 静态类成员实现单例模式
- 20170918心情总结
- 字节数组转16进制输出
- 每日一点C语言--蛇形填数
- Java1.7快速排序算法
- Mushroom的区间 (并查集)
- static成员与const方法(十五)
- Win10 Vs2017 环境下 C ++调用tensorflow模型
- C++虚表
- redis
- Unity隐身 观察隐身
- 《Java与模式》学习笔记(连载中...)
- git撤销删除分支操作
- python基础一