BZOJ 4857 反质数序列
奇数+奇数一定不是质数(1+1除外),偶数+偶数一定不是质数,质数只可能出现在偶数+奇数中
把所有的点排成两列,权值为奇数的点在左边,权值为偶数的在右边
如果左边的点x+右边的点y是质数,我们就连一条x->y的边
最后答案显然是最大独立集=n-最小点覆盖=n-最大匹配数
由于1比较特殊,考虑到最终答案1的出现次数<=1,所以如果有多个1只保留一个即可
#include <bits/stdc++.h>
using namespace std;
struct littlstar{
int to;
int nxt;
int w;
}star[];
int head[],cnt=;
void add(int u,int v,int w)
{
star[++cnt].to=v;
star[cnt].nxt=head[u];
star[cnt].w=w;
head[u]=cnt;
}
int n;
int prime[];
int a[];
void pre()
{
for(register int i=;i<=;i++){
if(prime[i]) continue;
for(register int j=i;j<=/i;j++){
prime[i*j]=;
}
}
}
int dis[];
queue<int> q;
bool bfs()
{
memset(dis,,sizeof(dis));
while(q.size()) q.pop();
q.push();
dis[]=;
while(q.size())
{
int u=q.front();
q.pop();
for(register int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(star[i].w&&!dis[v]){
q.push(v);
dis[v]=dis[u]+;
if(v==) return ;
}
}
}
return ;
}
int dinic(int u,int flow)
{
if(u==){
return flow;
}
int rest=flow,k;
for(register int i=head[u];i&&rest;i=star[i].nxt){
int v=star[i].to;
if(star[i].w&&dis[v]==dis[u]+){
k=dinic(v,min(rest,star[i].w));
if(!k) dis[v]=;
star[i].w-=k;
star[i^].w+=k;
rest-=k;
}
}
return flow-rest;
}
int maxflow=;
int b[];
int main ()
{
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+,a++n);
int tmpnum=;
for(int i=;i<=n;i++){
if(i>&&a[i]==){
continue;
}
b[++tmpnum]=a[i];
}
n=tmpnum;
for(int i=;i<=n;i++){
a[i]=b[i];
}
pre();
for(register int i=;i<=n;i++){
for(register int j=;j<=n;j++){
if(i==j) continue;
if(!prime[a[i]+a[j]]&&a[i]%==&&a[j]%==){
add(i,j,);
add(j,i,);
}
}
}
for(register int i=;i<=n;i++){
if(a[i]%==){
add(,i,);
add(i,,); }
else{
add(i,,);
add(,i,);
}
}
int flow=;
while(bfs()){
while(flow=dinic(,)){
maxflow+=flow;
}
}
cout<<n-maxflow;
}
BZOJ 4857 反质数序列的更多相关文章
- bzoj:3085: 反质数加强版SAPGAP
Description 先解释一下SAPGAP=Super AntiPrime, Greatest AntiPrime(真不是网络流),于是你就应该知道本题是一个关于反质数(Antiprime)的问题 ...
- [BZOJ 4857][Jsoi2016]反质数序列
传送门 $ \color{green} {solution : } $ 因为 $ 1 $ 的个数我们最多只能选一个,所以剩下的数如果组成素数那么只有一奇一偶,显然是个二分图模型 #include &l ...
- [BZOJ4857][JSOI2016]反质数序列[最大点独立集]
题意 在长度为 \(n\) 的序列 \(a\) 中选择尽量长的子序列,使得选出子序列中任意两个数的和不为质数. \(n\leq3000\ ,a_i\leq10^5\). 分析 直接按照奇偶性建立二分图 ...
- BZOJ 3085: 反质数加强版SAPGAP (反素数搜索)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3085 题意:求n(<=10^100)之内最大的反素数. 思路: 优化2: i ...
- [JSOI2016]反质数序列
我竟然半个小时切了一道JSOI2016,,,,不敢相信. 首先可以发现,如果N个数中1出现的次数<=1的话,我们按不能在一个集合连无向边的话,连出的一定是一个二分图. 接下来我来证明一下: 因为 ...
- [bzoj]1053反质数<暴搜>
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1053 感想:这道题拿到以后还是想去知道一个数的约数个数要怎么求,去网上搜了公式,但是还是没有思 ...
- 【LOJ】#2081. 「JSOI2016」反质数序列
题解 我居然都没反应过来二分图内选集合两两不能有边是最大独立集了 我退役吧 显然连边只能在奇数和偶数之间,然后二分图求最大独立集是节点数-最大匹配数 啊当然还有对于1的话只能留一个1 代码 #incl ...
- BZOJ1053 [HAOI2007]反素数 & BZOJ3085 反质数加强版SAPGAP
BZOJ 1053 Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x ,则称x ...
- [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)
[BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...
随机推荐
- sh_07_元组遍历
sh_07_元组遍历 info_tuple = ("zhangsan", 18, 1.75) # 使用迭代遍历元组 for my_info in info_tuple: # 使用格 ...
- Apicloud_(项目)网上书城02_后端数据获取
Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud_(项目)网上书城02_后端数据获取 传送门 Apicloud_(项目)网上书城03_拓展模块实现 传送门 ApiClou ...
- perl基础-1
基础 向函数中传递两个数组,使用指针 sub getSql{(my a,my b)=@_;my @array=@$a;} my @a;my @b; getSql(\@a,\@b); length($s ...
- 大哥带的XSS练习LEVE3
0X01DOM-XSS进阶之inner显式输出 首先我们先了解一下DOM型和和其他到底有什么区别 dom就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修 ...
- 分布式-信息方式-ActiveMQ构建应用
ActivemQ构建应用Broker:相当于一个 ActiveMQ服务器实例命令行启动参数示例如下:1 ...
- SpringApplication及banner的配置
配置SpringApplication 如果SpringApplication无法满足要求,你可以自己创建一个局部实例,然后对其进行设置: public static void main(String ...
- TensorFlow线性回归
目录 数据可视化 梯度下降 结果可视化 数据可视化 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt ...
- mesh之孔洞检测
mesh之孔洞检测 图1 检测孔洞点 图2 检测孔洞点 图3 检测孔洞点 图4 细节
- Git入门之常用命令(转载阮一峰老师)
流程图 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓 ...
- nodejs之流数据读取与写入
1.(fs.createReadStream)当文件比较大时,建议使用文件流读取,不会出现卡顿现象,demo如下. const fs = require('fs'); //流的方式读取文件 var r ...