思路不难想到二分图求个最大匹配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 ;
}

最新文章

  1. 【原】SDWebImage源码阅读(四)
  2. 【NLP】揭秘马尔可夫模型神秘面纱系列文章(三)
  3. PB函数大全
  4. Android常见的按钮监听器实现方式
  5. cs11_c++_lab2
  6. 理论与实践中的 C# 内存模型
  7. select多个字段赋值给多个变量
  8. Asp.net使用jQuery实现数据绑定与分页
  9. 使用百度zrender, demo抛砖引玉.
  10. Zookeeper系列(二)特征及应用场景
  11. 发一个自己写的php框架
  12. 第4章Zabbix监控实践
  13. Eclipse安装Hibernate插件快速生成配置文件
  14. java结合testng,利用txt做数据源的数据驱动实例
  15. prim及其练习
  16. 安装plsql developer
  17. C#调用系统蜂鸣(需要发出警告时挺好用的 即使没有声卡)
  18. 程序媛计划——python初级课时3~5
  19. Task 6.4 冲刺Two之站立会议8
  20. Extjs6 组件浅谈

热门文章

  1. AJPFX简述可变参数概述和使用
  2. [转]Sublime Text操作
  3. Git ---创建和切换分支
  4. Objective - c Foundation 框架详解2
  5. yii在Windows下安装(通过composer方式)
  6. Windows下使用JMeter
  7. Node.js——获取文件上传进度
  8. Android(java)学习笔记194:ContentProvider使用之获得系统联系人信息02(掌握)
  9. CAD参数绘制角度标注(com接口)
  10. linux远程开机