思路不难想到二分图求个最大匹配P,若P>=K,则2*K即可,否则应为P*2+min(K-P,未匹配且有度数不为0的顶点个数s)。但坑点在于有1的情况,所以如果直接建二分图去跑最大匹配会因为1的影响而无法得到实际上的最大匹配,所以索性不建二分图而直接去跑最大匹配,此时应记录的是每个顶点的匹配顶点即可。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<string>
#include<set>
#include<algorithm>
#include<vector>
#include<queue>
#include<list>
#include<cmath>
#include<cstring>
#include<map>
#include<stack>
using namespace std;
#define INF 0x3f3f3f3f
#define maxn 2000005
#define ull unsigned long long
#define ll long long
#define hashmod 99999839
#define mod 9997
bool isprim[maxn],f[];
int pre[];
int prim[maxn],len,a[];
vector<int> vec[];
void init(){
for(int i = ;i < maxn;i++) isprim[i] = true;
for(int i = ;i < maxn;++i){
if(isprim[i]) prim[len++] = i;
for(int j = ;j < len;++j){
if(i * prim[j] > maxn) break;
isprim[i * prim[j]] = false;
if(i % prim[j] == ) break;
}
}
}
bool dfs(int v){//尝试匹配v
f[v] = true;
for(int i = ;i < vec[v].size();++i){
int t = vec[v][i];
if(!f[t]){
f[t] = true;
if(!pre[t] || dfs(pre[t])){
pre[t] = v;
pre[v] = t;
f[t] = false;
f[v] = false;
return true;
}
}
}
return false;
}
int main(){
// freopen("a.in","r",stdin);
// freopen("b.out","w",stdout);
init();
int T;
cin >> T;
int n,k;
while(T--){
scanf("%d%d",&n,&k);
for(int i = ;i <= n;++i){
scanf("%d",&a[i]);
}
sort(a + ,a + n + );
for(int i = ;i <= n;++i){
for(int j = i + ;j <= n;++j){
if(isprim[a[i] + a[j]]) vec[i].push_back(j),vec[j].push_back(i);
}
}
memset(f,false,sizeof(f));
memset(pre,,sizeof(pre));
int ans = ;
for(int i = ;i <= n;++i){
if(!pre[i] && !f[i] && dfs(i)){
ans++;
}
}
if(ans >= k) ans = k * ;
else{
k -= ans;
ans = ans * ;
for(int i = ;i <= n && k;++i){
if(!pre[i]){
int sz = vec[i].size();
if(sz) k--,ans++;
}
}
}
for(int i = ;i <= n;++i) vec[i].clear();
printf("%d\n",ans);
}
return ;
}

zoj3988 Prime Set的更多相关文章

  1. 【二分图最大匹配】【匈牙利算法】zoj3988 Prime Set

    题意:给你n个正整数,一对和为素数的数为一个合法数对.你选不超过K个合法数对,使得你选的数对涉及到的数的数量最大化.输出这个值. 所有1之间是可以任意两两配对的. 把奇数放在左侧,偶数放在右侧. 考虑 ...

  2. 2017CCPC秦皇岛 H题Prime Set&&ZOJ3988

    题意: 定义一种集合,只有两个数,两个数不同且加起来为素数.要从n个数里抽出数字组成该集合(数字也可以是1~n,这个好懵圈啊),要求你选择最多k个该种集合组成一个有最多元素的集合,求出元素的数量. 思 ...

  3. ZOJ-3988 2017CCPC-秦皇岛 Prime Set 二分图最大匹配 匈牙利

    题面 题意:给你n个数,你可以选择2个和为质数的数为一对,每个数可以重复选择,你最多选k对,问你最多能选多少个不同数出来 题解:首先思考怎么样的数和为质数,2个偶数相加不行,除了1+1以外2个奇数相加 ...

  4. Java 素数 prime numbers-LeetCode 204

    Description: Count the number of prime numbers less than a non-negative number, n click to show more ...

  5. Prime Generator

    Peter wants to generate some prime numbers for his cryptosystem. Help him! Your task is to generate ...

  6. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  7. UVa 524 Prime Ring Problem(回溯法)

    传送门 Description A ring is composed of n (even number) circles as shown in diagram. Put natural numbe ...

  8. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  9. hdu 5901 count prime & code vs 3223 素数密度

    hdu5901题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5901 code vs 3223题目链接:http://codevs.cn/problem ...

随机推荐

  1. [BZOJ1008][HNOI2008]越狱 组合数学

    http://www.lydsy.com/JudgeOnline/problem.php?id=1008 正着直接算有点难,我们考虑反着来,用全集减补集. 总的方案数为$m^n$.第一个人有$m$种可 ...

  2. 461在全志r16平台tinav3.0系统下使用地磁计QMC5883L

    461在全志r16平台tinav3.0系统下使用地磁计QMC5883L 2018/9/7 14:08 版本:V1.0 开发板:SC3817R SDK:tina v3.0 (基本确认全志tina v3. ...

  3. ESLint - 简介

    ESLint是一个QA工具,用来避免低级错误和统一代码的风格. ESLint被设计为完全可配置的,主要有两种方式来配置ESLint: 在注释中配置:使用JavaScript注释直接把配置嵌入到JS文件 ...

  4. 如何安装sql server2005 windows 8

    如何安装sql server2005   windows 8 1 从网上下载到本地文件 ,这里使用的是cs_sql_2005_dev_all_dvd 安装版. 2. 点击下图所表示进行安装   3. ...

  5. iOS Programming Editing UITableView

    iOS Programming Editing UITableView 1.1 Editing mode  UITableView has an editing property, and when ...

  6. php5.6.30开启redis扩展

    注:5.6版本的php一定要下载phpredis3.0以上的版本,之前自己下载用的2.2.4的redis,安装配置完成后,PHP死活不支持redis的扩展,通过phpinfo打印也压根看不到,重复服务 ...

  7. provider模式

    最近看代码有所感想吧.当底层API,发生变化时,可以使用Provider模式.既然是模式就一定的股则. 1.该模式对原有接口的封装. 2.该模式实现对API的封装,不显示细节,从而取消依赖关系. 3. ...

  8. jQuery PC端图片预览,鼠标移上去查看大图

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 導出Excel方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  10. android studio 调试安装

    最新的手机无法debug安装调试. vivo x21  oppo r11等 解决办法: 1,关闭instant run Android Studio->Preferences->Build ...