Prime Independence
题意:
对于给定集合,求解最大的子集合,使得集合内两两之商不为质数。
解法:
考虑对于每一个数字分解质因数可以得到 $O(nloglogNUM)$ 条两个数字不可以出现在同一集合的信息。
同时发现一条代表冲突的边必然是联结一个由奇数个质数连乘构成的数字和一个由偶数个质数连乘构成的数字。
是一个二分图,考虑最大独立集即可。
#include <bits/stdc++.h> const int N = ; using namespace std; int n,timnow;
int pre[N],a[N],v[N],cnt[N],Id[];
vector<int> g[N],fac[N]; bool find(int x)
{
for(int i=;i<(int)g[x].size();i++)
{
int p = g[x][i];
if(v[p] == timnow) continue;
v[p] = timnow;
if(!pre[p] || find(pre[p]))
{
pre[p] = x;
return ;
}
}
return ;
} int main()
{
int T,Te = ;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++) g[i].clear(),pre[i] = ,fac[i].clear(),cnt[i]=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
Id[a[i]] = i;
int tmp = a[i];
for(int j=;j*j<=a[i];j++)
if(tmp%j==)
{
fac[i].push_back(j);
while(tmp%j==) tmp/=j, cnt[i]++;
}
if(tmp>) fac[i].push_back(tmp), cnt[i]++;
}
for(int i=;i<=n;i++)
{
for(int j=;j<(int)fac[i].size();j++)
{
int tmp = a[i]/fac[i][j];
if(Id[tmp])
{
int k = Id[tmp];
if(cnt[i]&) g[i].push_back(k);
else g[k].push_back(i);
}
}
}
int ans = ;
for(int i=;i<=n;i++)
{
timnow ++;
if(find(i)) ans++;
Id[a[i]] = ;
}
printf("Case %d: %d\n", ++Te, n-ans);
}
return ;
}
Prime Independence的更多相关文章
- LightOJ 1356 Prime Independence 二分图最大独立集,HK算法
这个题唯一需要说的就是普通的匈牙利算法是O(nm)的,过不了 然后HK算法可以O(n^0.5m),这个算法可以每次找很多同样长度的最短增广路 分析见:http://www.hardbird.net/l ...
- LightOJ - 1356 Prime Independence (数论+二分图匹配)
题意:有N个数的集合,其中选出若干个数组成一个子集,要求这个子集中的任意两个数a,b都不能通过a=k*b得到,其中k是一个素数.求这个子集最大的size. 分析:集合中任意两数的关系是二者之间是否之差 ...
- LightOJ - 1356 Prime Independence (二分图 最大独立集 素数打表)
题意: 给你一个集合,让你从这个集合中挑选出几个数,使得这几个数中任意两个数相除后的值不能为素数 即挑选出来的这几个数不能互相冲突 最大独立集 = 所有点数 - 最大匹配数 呵..呵...原先用的二维 ...
- LightOJ 1356 Prime Independence(质因数分解+最大独立集+Hopcroft-Carp)
http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1356 题意: 给出n个数,问最多能选几个数,使得该集合中的 ...
- Lightoj-1356 Prime Independence(质因子分解)(Hopcroft-Karp优化的最大匹配)
题意: 找出一个集合中的最大独立集,任意两数字之间不能是素数倍数的关系. 思路: 最大独立集,必然是二分图. 最大数字50w,考虑对每个数质因子分解,然后枚举所有除去一个质因子后的数是否存在,存在则建 ...
- [kuangbin带你飞]专题十四 数论基础
ID Origin Title 111 / 423 Problem A LightOJ 1370 Bi-shoe and Phi-shoe 21 / 74 Problem B ...
- KUANGBIN带你飞
KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题 //201 ...
- kuangbin 带你飞 数学基础
模版整理: 晒素数 void init() { cas = ; ; i < MAXD ; i++) is_prime[i] = true; is_prime[] = is_prime[] = f ...
- [kuangbin带你飞]专题1-23题目清单总结
[kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...
随机推荐
- 7.JAVA编程思想笔记隐藏实施过程
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51040237 "进行面向对象的设计时,一项主要的考虑是:怎样将发生变 ...
- 不能hadoop-daemon.sh start datanode, 显示 错误: 找不到或无法加载主类 ”-Djava.library.path=.home.hadoop.apps.hadoop-2.6.4.lib”
这两行代码是用来解决一个Hadoop,32位和64位不兼容的警告的,(这个警告可以忽略) 这两行加到mini2~min4后, export HADOOP_COMMON_LIB_NATIVE_DIR=$ ...
- viewpager 跳转到指定页面
viewPager.setCurrentItem(getUserIndex(userId)); seCurrentItem是定位到指定页面参数是position
- 获取当前外网IP地址
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script><script>cons ...
- Linux 下编译安装OpenCV(zhuanzai)
http://www.cnblogs.com/emouse/archive/2013/02/22/2922940.html Cmake的安装 OpenCV 2.2以后版本需要使用Cmake生成make ...
- STL源代码剖析——基本算法stl_algobase.h
前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_comp ...
- 【TensorFlow-windows】(四) CNN(卷积神经网络)进行手写数字识别(mnist)
主要内容: 1.基于CNN的mnist手写数字识别(详细代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64. ...
- 【原创】Sublime Text 3快捷配置c++的编译,运行,gdb环境
打开Tools ->Build System -> New Build System 弹出一个文件,将原有的东西删掉,输入: { "encoding": "u ...
- EasyDarwin开源音频解码项目EasyAudioDecoder:EasyPlayer Android音频解码库(第二部分,封装解码器接口)
上一节我们讲了如何基于ffmpeg-Android工程编译安卓上的支持音频的ffmpeg静态库:http://blog.csdn.net/xiejiashu/article/details/52524 ...
- Java NIO 粘包 拆包 (实战) - 史上最全解读
疯狂创客圈 Java 聊天程序[ 亿级流量]实战系列之13 [博客园 总入口 ] 本文的源码工程:Netty 粘包/半包原理与拆包实战 源码 本实例是<Netty 粘包/半包原理与拆包实战> ...