题面

奇数+奇数一定不是质数(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;
}

最新文章

  1. paper 114:Mahalanobis Distance(马氏距离)
  2. bc#27做题笔记
  3. 数迹学——Asp.Net MVC4入门指南(4):添加一个模型
  4. JDK动态代理的实现及原理
  5. ubuntu14.10服务器版安装xampp,配置域名端口访问
  6. 限制SSH访问源,禁止4A之外的地址跳转访问
  7. UITextField 设置 placeholder 的字体颜色方法
  8. Solr 管理界面删除所有数据
  9. 【SQL Server】利用游标将学生表中的成绩转化为绩点
  10. NodeJs安装步骤与淘宝镜像
  11. JAVA的下载与安装和环境变量配置等详细教程
  12. Socket用线程池处理服务
  13. 20155210潘滢昊 2016-2017-2 《Java程序设计》第8周学习总结
  14. SQL Server从BAK文件还原新的数据库
  15. Linux 下的hiredis的简单安装、测试*(转)
  16. Sublime Text3之安裝Emmet及使用技巧
  17. add命令
  18. 双系统下ubuntu不能访问658GB卷,磁盘挂载失败。
  19. Angular 例子
  20. overflow:scroll 在ios 滚动卡顿

热门文章

  1. Misplaced alignment tab character &amp;
  2. jQuery动态添加和删除表格行
  3. microsoft office 2010 visio激活
  4. IntelliJ IDEA 常用快捷键整理
  5. LeetCode 152. 乘积最大子序列(Maximum Product Subarray)
  6. asp.net form submit 在Chrome里面看Form提交
  7. leetcode-easy-array-136. Single Number
  8. 如何将打印内容转换为bmp位图文件
  9. IDEA创建maven各种原型项目汇总
  10. idea报错及解决