* 65536kb,仅仅能开到1.76*10^7大小的数组。

而题目的N取到了10^7。我開始做的时候没注意,用了按秩合并,uset+rank达到了2*10^7所以MLE,所以貌似不能用按秩合并。

事实上路径压缩也能够不用.............


题目的大意:

一个password锁上有编号为1到N的N个字母,每一个字母能够取26个小写英文字母中的一个。再给你M个区间[L,M]。表示该区间的字母能够一起同步“添加”(从'a'变为'b'为增1。'z'增1为'a')。假如一组password依照给定的区间进行有限次的“添加”操作后能够变成还有一组password,那么我们觉得这两组password是同样的。该题的目标就是在给定N、M和M个区间的前提下计算有多少种不同的password。



     依据题意,假设一个可调整的区间都没有的话,答案应该是26的N次方。每当增加一个区间的时候。答案就降低为之前的26分之1(由于该区间的增加使得原本不同的26种情况变得等价了)。因此当有x个“不同的”区间增加进来之后,答案应该为26^(N-x)。

可是另一些特殊情况须要考虑。一个是相同的区间反复增加是不会改变答案的,这点比較好理解。

另一点是假设一个区间能够由其它若干个区间“拼接”而得到,那么它的增加不能改变答案。比如假设已经有了区间[1,3]和[4,5]。那么再增加区间[1,5]答案也不会改变,由于[1,5]所能实现的password变化全都能够由同步运行[1,3]与[4,5]来实现,也就是[1,3]+[4,5]等价于[1,5]。特别要注意的是[1,3]+[3,5]这样的情况并不等价于[1,5]。

思路:

所以题目就是求区间的个数了。可是注意的是 【1,3】【4,5】和【1,5】区间是等价的。【1。3】【3,5】和【1。5】又是不等价的的。由于3是重叠的。

怎样解决区间个数,用并查集刚好,只是要变化的是merge_set(l-1,r)或者merge_set【l。r+1】这样能够解决,线段的拼接问题。这里要好好想一下。

怎样求区间:

并查集, merge_set(l-1,r) or  merge_set( l,r+1),这里要好好想一下。通过+1,-1刚好连接上了端点,不是吗?

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define mod 1000000007
#define N 10000000+10
using namespace std; typedef long long int64;
int uset[N];
//int rank[N];
int cnt; void make_set(int n)
{
for(int i=0;i<=n;i++)
{
uset[i]=i;
//rank[i]=1;
}
} int find_set(int x)
{
if(uset[x]!=x)
uset[x]=find_set(uset[x]);
return uset[x];
} void merge_set(int x,int y)
{
int fx=find_set(x);
int fy=find_set(y);
if(fx==fy)
return;
else
{
uset[fx]=fy;
cnt++;
}
} int64 exp(int n)
{
int64 res=1;
int64 tmp=26;
while(n)
{
if(n&1)
res=(res*tmp)%mod;
tmp=tmp*tmp%mod;
n>>=1;
} return res;
} int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
make_set(n);
cnt=0;
for(int i=0;i<m;i++)
{
int l,r;
scanf("%d%d",&l,&r);
merge_set(l-1,r);
}
//printf("-->%d\n",n-cnt);
printf("%I64d\n",exp(n-cnt));
} return 0; }

HDU 3461 Code Lock(并查集的应用+高速幂)的更多相关文章

  1. HDU 3461 Code Lock(并查集+二分求幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3461 A lock you use has a code system to be opened in ...

  2. HDU 3461 Code Lock(并查集,合并区间,思路太难想了啊)

    完全没思路,题目也没看懂,直接参考大牛们的解法. http://www.myexception.cn/program/723825.html 题意是说有N个字母组成的密码锁,如[wersdfj],每一 ...

  3. hdu 3461 Code Lock 并查集(有点难想到)★★

    #include<stdio.h> #include<math.h> ]; int count; #define mod 1000000007 int find(int x) ...

  4. HDU 3461 Code Lock(并查集)

    很好的一个题,思想特别6 题意:给你小写字母个数n,每个字母可以向上翻动,例如:d->c,a->z.然后给你m对数(L,R)(L<=R),表示[L,R]之间可以同时向上翻动,且翻动后 ...

  5. hdu 3461 Code Lock(并查集)2010 ACM-ICPC Multi-University Training Contest(3)

    想不到这还可以用并查集解,不过后来证明确实可以…… 题意也有些难理解—— 给你一个锁,这个所由n个字母组成,然后这个锁有m个区间,每次可以对一个区间进行操作,并且区间中的所有字母要同时操作.每次操作可 ...

  6. HDU 3461 思维+并查集

    Code Lock 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3461 Problem Description A lock you use has ...

  7. hdu 3461 Code Lock

    http://acm.hdu.edu.cn/showproblem.php?pid=3461 并差集和幂取模 这道题主要是求不可操作区间. #include <cstdio> #inclu ...

  8. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  9. hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)

    hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 ...

随机推荐

  1. Python之时间:calender模块(日历)

    import calendar 1.星期 (1)calendar.day_name 星期的全称 print calendar.day_name for i in calendar.day_name: ...

  2. pat 团体天梯赛 L3-010. 是否完全二叉搜索树

    L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...

  3. 线程间操作无效: 从不是创建控件“textBox4”的线程访问它

    原文发布时间为:2009-03-30 -- 来源于本人的百度文章 [由搬家工具导入] public long str1, str2, str3, str4, str5, sum=0,sum1=0; p ...

  4. 牛客挑战赛14-F细胞

    https://www.nowcoder.com/acm/contest/81/F 循环卷积的裸题,太久没做FFT了,这么裸的循环卷积都看不出来 注意一下本文的mod 都是指表示幂的模数,而不是NTT ...

  5. [Visual Studio] 确定项目是用Visual Studio哪个版本开发的

    用记事本打开 .sln文件,在第3行就有:

  6. shell的各种运行模式?

    交互式shell和非交互式shell,login shell和non-login shell.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录.. 交互式模式就是shell等待你的 ...

  7. CVPR 2019|PoolNet:基于池化技术的显著性检测 论文解读

    作者 | 文永亮 研究方向 | 目标检测.GAN 研究动机 ​ 这是一篇发表于CVPR2019的关于显著性目标检测的paper,在U型结构的特征网络中,高层富含语义特征捕获的位置信息在自底向上的传播过 ...

  8. Java Hibernate事务并发控制

    在产品上线时发现当用户数量大并发性能差,经常发现数据库死锁,经诊断,是由于设置了不正确的事务隔离,可以做如下优级化(这里我们使用JTA事务): JTA具有的3个接口:UserTransaction接口 ...

  9. Loj #6142. 「2017 山东三轮集训 Day6」A

    link: https://loj.ac/problem/6142 推完一波式子之后发现求的是:ΣC(N,i)^2, 其中i是偶数. 然后就可以卢卡斯乱搞了,分奇偶和之前的答案合并就好了233. #i ...

  10. servlet源码查看

    1,下载源码,点击此处可下载 2,创建web项目 我这里以jdbc这个web项目为例讲解 在javaee libraries中有个javaee.jar包,选中它-->右击-->Proper ...