hdu3461Code Lock 快速幂+并查集
来源:互联网 发布:电信的网络尖兵限制了 编辑:程序博客网 时间:2024/05/20 11:34
//n个字母从a到z的字母组成的字母锁,m个区间[l,r]表示从l到r的所有字母可以同步增加//当一个字母锁能够由另一个通过有限次的增加操作变为另一个,就表示它们是同一个//问有多少个不同的字母锁//如果没有联动的区间,个数为26^n个,增加一个独立的联动的区间,那么个数为26^(n-1)//因为在这个区间内的26中情况数相同的,现在是要找有多少个独立的联动区间//对于一个区间[l,r],join(l,r+1)这样对于一个新的区间如果是将原来的分开的联动的区间总体联动的就可以去掉#include<cstdio>#include<cstring>#include<iostream>using namespace std ;typedef __int64 ll ;const int maxn = 10000010 ;const ll mod = 1000000007 ;int F[maxn] ;ll pow(int b){ ll c = 1 ; ll a = 26 ; while(b) { if(b&1)c = ((c%mod)*(a%mod))%mod; a =(a*a)%mod ; b >>= 1; } return c ;}int find(int x){ if(F[x] == 0)return x ; return F[x] = find(F[x]) ;}bool join(int x , int y){ int fx = find(x) ; int fy = find(y) ; if(fx == fy)return false ; F[fx] = fy ; return true ;}int main(){ int n , m ; while(~scanf("%d%d" , &n , &m)) { memset(F , 0, sizeof(F)) ; int sum = 0 ; while(m--) { int l , r ; scanf("%d%d" ,&l , &r) ; if(join(l , r+1)) sum++ ; } printf("%I64d\n" , pow(n - sum)) ; } return 0 ;}
0 0
- hdu3461Code Lock 快速幂+并查集
- hdu3461Code Lock【并查集+快速幂】
- hdu3461Code Lock
- hdu 3461 Code Lock【并查集+快速幂】
- hdu 3461 Code Lock(并查集+快速幂)
- hdu 3461 Code Lock(并查集+快速幂)
- hdu3461 Code Lock(并查集+快速幂)
- hdu3461 Code Lock (并查集+快速幂)
- Code Lock(并查集 + 快速幂)
- HDU 3461 Code Lock(并查集的应用+快速幂)
- HDU 3461 Code Lock(并查集+二分求幂)
- hdu 3461 Code Lock(并查集+二分求幂)
- HDU-3461 Code Lock 并查集 + 二分求幂
- HDU3461 Code Lock 并查集应用
- HDU 3461 Code Lock (并查集)
- 【并查集】 HDOJ 3461 Code Lock
- HDC3461Code Lock(并查集)
- (并查集) Code Lock --HDOJ
- case语句的用法
- cocos2d-x 声音和音效
- 昂贵的聘礼(POJ--1062
- 二分查找
- input输入框内容的显示和消失;导航栏对子栏的展现和隐藏
- hdu3461Code Lock 快速幂+并查集
- hdu 2022海选女主角
- JAVA基础一大堆0804XML+UDP
- 版本加载一些用户态用法总结--pthread_create函数用法
- 并查集详解
- Gson序列化对象排除属性
- Unique Binary Search Trees II
- 创业之初需要的是人而不是钱
- Java对象的创建过程