传送门

$ \color{green} {solution : } $

因为 $ 1 $ 的个数我们最多只能选一个,所以剩下的数如果组成素数那么只有一奇一偶,显然是个二分图模型

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000010, inf = 0x3f3f3f3f;

int head[maxn], to[maxn << 1], v[maxn << 1], pos[maxn << 1], p;
inline void build(int a, int b, int c) {
    v[++ p] = b; to[p] = head[a]; head[a] = p; pos[p] = c;
}

int dis[maxn], cur[maxn], s, t;

queue<int> tp;

bool bfs() {
    memset(dis, 0, sizeof(dis)); dis[s] = 1; tp.push(s);
    while ( !tp.empty()) {
        int u = tp.front(); tp.pop();
        for ( int i = head[u]; ~i; i = to[i])
            if( !dis[v[i]] && pos[i])
                dis[v[i]] = dis[u] + 1, tp.push(v[i]);
    }
    for ( int i = s; i <= t; ++ i) cur[i] = head[i];
    return dis[t] != 0;
}

int dfs(int u, int f) {
    if( !f || u == t) return f;
    int flow = 0;
    for ( int &i = cur[u]; ~i; i = to[i])
        if( dis[v[i]] == dis[u] + 1){
            int k = dfs(v[i], min(f, pos[i]));
            if( k) {
                pos[i] -= k; pos[i ^ 1] += k;
                flow += k; f -= k;
                if( !f) return flow;
            }
        }
    return flow;
}

int max_flow() {
    int ret = 0;
    while ( bfs()) ret += dfs(s, inf);
    return ret;
}

int prim[maxn], book[maxn], vl[maxn], cnt[maxn], tot, n;
int main() {
#ifndef ONLINE_JUDGE
    freopen("2.in", "r", stdin);
#endif
    memset(head, -1, sizeof(head)); p = -1;
    scanf("%d", &n);
    for ( int i = 1; i <= n; ++ i) scanf("%d", vl + i);
    sort(vl + 1, vl + 1 + n);
    int op = 1;
    for ( int i = 1; i <= n; ++ i) {
        if( vl[i] != vl[op]) vl[++ op] = vl[i];
        ++ cnt[op];
    }
    n = op; if( vl[1] == 1) cnt[1] = 1;
    s = 0; t = n + 1;
    for ( int i = 2; i <= (vl[n] << 1); ++ i) {
        if( !book[i]) prim[++ tot] = i;
        for ( int k = 1; k <= tot; ++ k) {
            if( i * prim[k] > (vl[n] << 1)) break;
            book[i * prim[k]] = 1;
            if( i % prim[k] == 0) break;
        }
    }
    int ret = 0;
    for ( int i = 1; i <= n; ++ i) {
        ret += cnt[i];
        if( vl[i]&1) {
            build(s, i, cnt[i]), build(i, s, 0);
            for ( int k = 1; k <= n; ++ k) if( !book[vl[i]+vl[k]])
                build(i, k, inf), build(k, i, 0);
        }
        else build(i, t, cnt[i]), build(t, i, 0);
    }
    printf("%d\n", ret - max_flow());
    return 0;
}

[BZOJ 4857][Jsoi2016]反质数序列的更多相关文章

  1. [BZOJ4857][JSOI2016]反质数序列[最大点独立集]

    题意 在长度为 \(n\) 的序列 \(a\) 中选择尽量长的子序列,使得选出子序列中任意两个数的和不为质数. \(n\leq3000\ ,a_i\leq10^5\). 分析 直接按照奇偶性建立二分图 ...

  2. [JSOI2016]反质数序列

    我竟然半个小时切了一道JSOI2016,,,,不敢相信. 首先可以发现,如果N个数中1出现的次数<=1的话,我们按不能在一个集合连无向边的话,连出的一定是一个二分图. 接下来我来证明一下: 因为 ...

  3. BZOJ 4857 反质数序列

    题面 奇数+奇数一定不是质数(1+1除外),偶数+偶数一定不是质数,质数只可能出现在偶数+奇数中 把所有的点排成两列,权值为奇数的点在左边,权值为偶数的在右边 如果左边的点x+右边的点y是质数,我们就 ...

  4. 【LOJ】#2081. 「JSOI2016」反质数序列

    题解 我居然都没反应过来二分图内选集合两两不能有边是最大独立集了 我退役吧 显然连边只能在奇数和偶数之间,然后二分图求最大独立集是节点数-最大匹配数 啊当然还有对于1的话只能留一个1 代码 #incl ...

  5. bzoj:3085: 反质数加强版SAPGAP

    Description 先解释一下SAPGAP=Super AntiPrime, Greatest AntiPrime(真不是网络流),于是你就应该知道本题是一个关于反质数(Antiprime)的问题 ...

  6. BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划

    BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划 又是一道卡精度卡得我头皮发麻的题-- 题面(--蜜汁改编版) YL大哥是24OI的大哥,有一天,他想要从\(N\)个候选人中选 ...

  7. 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 ...

  8. CNUOJ 0486 800401反质数

    难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1,g(4)=3, g ...

  9. 反质数问题,求不大于n的最大反质数

    反质数:设f(n)表示n个约数的个数,如果对于任意x有0<x<n, f(x) < f(n),那么n就是一个反质数 我们都知道对于任意一个数n,都可以用质数乘积的形式表示出来:x = ...

随机推荐

  1. code1006 等差数列

    我绞尽脑汁想一个更好的算法,然而不能如愿,只好写一个n^3的了 很简单,就是暴力搜索(还好n<100) 先排序,然后循环i=1ton,j=i+1ton 把a[i]a[j]确定为等差数列开始的两个 ...

  2. Python爬虫入门四之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  3. 回顾2017系列篇(三):UX设计大会,都预示了哪些设计趋势

    2017已接近尾声,在这一年中,无数的UX大会和设计大会在世界各地召开.每一场会议的召开,都是界内精英人士经验的交流和智慧的碰撞.虽然2017年的会议都已过去,但每场会议上的话题探讨,尤其是界内精英们 ...

  4. sed命令n,N,d,D,p,P,h,H,g,G,x解析2

    摘自: https://blog.csdn.net/xiexingshishu/article/details/50514132 sed命令n,N,d,D,p,P,h,H,g,G,x解析 2016年0 ...

  5. log4j-over-slf4j工作原理详解

    log4j-over-slf4j工作原理详解 摘自:https://blog.csdn.net/john1337/article/details/76152906 置顶 2017年07月26日 17: ...

  6. Web测试实践--Rec 4

    累计完成任务情况: 阶段内容 参与人 整理小组工作记录,维护小组博客 小尹 分析产品并撰写文档相关板块 小靳 撰写文档中对被测系统进行功能性分析相关板块 小龙.小黄 撰写文档中用户调研相关板块 小熊 ...

  7. YII2 自动 created_at created_by updated_by updated_at

    use yii\behaviors\TimestampBehavior; use yii\behaviors\BlameableBehavior; use yii\db\Expression; /** ...

  8. 阿里云OSS-web直传---在服务端c#签名,浏览器直传

    OSS web直传---在服务端php签名,浏览器直传 本文:OSS web直传---在服务端c#签名,浏览器直传 其他语言的范例地址:https://help.aliyun.com/document ...

  9. HDU 3363 Ice-sugar Gourd (贪心)

    题意:给你一个串,串中有H跟T两种字符,然后切任意刀,使得能把H跟T各自分为原来的一半. 析:由于只有两个字母,那么只要可以分成两份,那么一定有一段是连续的. 代码如下: #include <c ...

  10. 浅说Java反射机制

    工作中遇到,问题解决: JAVA语言中的反射机制: 在Java 运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法? 对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的 ...