yzoj2057 x 题解
题意:给出一个集合,要求把这个集合分成两部分,使得一个集合中的任一元素都与另一个集合的全部元素都两两互质
暴力
枚举每个元素O(n^2)再暴力判gcd=1,如果非1就放入不同集合内,用并查集维护联通块的个数即可,答案就是联通块个数减2(无空集)
考虑在暴力的基础上优化,我们可以发现一个元素与它的质因数的倍数一定不在同一集合内,我们可以枚举它的质因数,将它的倍数和它划分于用并查集连接,这样就形成了若干联通块,质数可先用线性筛预处理,注意一下1的判断即可。
代码
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7,MAX=1e6+10;
int T;
long long ans,n,a[MAX],v[MAX],p[MAX],fa[MAX],cnt=0,maxn=-1,book[MAX],sum;
void prime(){
for(int i=2;i<=MAX;++i){
if(!v[i]){
p[++cnt]=i;
for(int j=i;j<=MAX/i;++j) v[i*j]=1;
}
}
}
long long find(long long x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
long long clu(long long x,long long y){
long long tmp=1;
while(y){
if(y&1) tmp=(tmp*x)%mod;
x=(x*x)%mod;
y=y>>1;
}
return tmp%mod;
}
int main(){
prime();
scanf("%d",&T);
while(T--){
scanf("%lld",&n);
memset(a,0,sizeof(a));
memset(book,0,sizeof(book));
memset(v,0,sizeof(v));
ans=0,maxn=-1,sum=0;
for(int i=1;i<=MAX;++i) fa[i]=i;
for(int i=1;i<=n;++i){
scanf("%lld",&a[i]);
maxn=max(maxn,a[i]);
if(a[i]==1) sum++;
v[a[i]]++;
}
for(int i=1;i<=cnt;++i){
for(int j=1;j*p[i]<=maxn;++j){
if(v[j*p[i]]){
long long fax=find(p[i]);
long long fbx=find(j*p[i]);
if(fax!=fbx) fa[fax]=fbx;
}
}
}
for(int i=1;i<=n;++i){
if(!book[find(a[i])]) ans++,book[find(a[i])]=1;
}
if(sum>1) ans+=(sum-1);
ans=clu(2,ans);
ans=(ans-2+mod)%mod;
printf("%d\n",ans);
}
return 0;
}
yzoj2057 x 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- unimrcp-voice-activity语音检测
研究 unimrcp有一段时间了,其中unimrcp voice acitve的算法,是遭到大家频繁吐槽.今天我们简单的介绍一下unimrcp voice activity 的这个简单粗暴的算法: u ...
- 03、Swagger2和Springmvc整合详细记录(爬坑记录)
时间 内容 备注 2018年6月18日 基本使用 spirngmvc整合swagger2 开始之前这个系列博文基本是,在项目的使用中一些模块的内容记录,但是后期逐渐优化,不单单是整合内容. swagg ...
- .net core使用MQTT
废话不多说,我们来直接实践…… 一.搭建mqtt控制台服务端 新建一个.net core控制台项目,然后使用Nuget添加MQTTnet包,我这里使用2.4版本,注意不同版本,代码写法不相同,如下图 ...
- 1、Java小白之路前言
大二一年准备好好学习Java,养成一个良好的习惯写博客,但是由于各种各样的原因,并没有坚持下来.而正好又赶上大三结束,去实习,发现自己的基础还是有些薄弱,所以决定,重新走上这条Java小白之路. 时隔 ...
- eclipse使用(一)
使用eclipse时,编写对象的返回值非常麻烦,而使用返回值快捷键可以简化这一过程. 第一种 Alt+shift+L 将光标放在有返回值的代码句的分号后面: Resources.getResource ...
- npm命令无响应
npm命令完全无反应,不是加载的那种状态 而是下标不停地在哪里闪... 之后找解决方案,说要删除npmrc文件. 强调:不是nodejs安装目录npm模块下的那个npmrc文件 而是在C:\Users ...
- C++ “::” 作用域符 双冒号
C++ "::" 作用域符 双冒号 作用域符 :: 是作用域符,是运算符中等级最高的,它分为三种: 1)global scope(全局作用域符),用法(::name) 2)clas ...
- 中间件增强框架之InterceptFramework
本文讲解MOF中的InterceptFramework框架.该框架可以在应用启动过程中获取画像信息,实现应用画像数据采集和存储. 一.前言 在智能运维中,应用服务所使用的组件及JAR包等相关信息非常重 ...
- 前端表格数据导出excel
使用tableExport.js导出bootstrap-table表格成excel并且支持中文 1. 下载tableExport.js https://github.com/hhurz/tableEx ...
- maven学习(1)下载和安装和初步使用(手动构建项目和自动构建项目)
1:背景 关于项目的搭建,有些人使用开发工具搭建项目,然后将项目所依赖第三方jar 复制到类路径下面,上述搭建方式没有第三方类库的依赖关系,在导入一个jar包的时候,这个jar包还可能依赖其他jar包 ...