素数伴侣--最大二分匹配
来源:互联网 发布:淘宝店铺 出售 编辑:程序博客网 时间:2024/05/06 11:22
#include<bits/stdc++.h>using namespace std;#define N 100int edge[N][N],cx[N],cy[N];//edge记录两点的关系,如果两点相连,则edge【i】【j】为1int visited[N];//判断该店是否被访问过int nx,ny,res;const int M=60000+100;bool prim[M];void initprim(){ memset(prim,true,sizeof(prim)); prim[0]=prim[1]=false; for(int i=2; i*i<=M; i++) for(int j=i*i; j<M; j+=i) { if(prim[j])prim[j]=false; }}int path(int u){ int v; for(v=0; v<ny; v++) { if(edge[u][v]&&!visited[v]) { visited[v]=1; if(cy[v]==-1||path(cy[v]))////如果y集合中的v元素没有匹配或者是v已经匹配,但是从cy[v]中能够找到一条增广路 { cx[u]=v; cy[v]=u; return 1; } } } return 0;}int main(){ int n; initprim(); while(scanf("%d",&n)!=EOF) { int i,j,a[100]= {0},a1[100]= {0},a2[100]= {0}; nx=0,ny=0,res=0; memset(cx,0xff,sizeof(cx)); memset(cy,0xff,sizeof(cy));//初始值为-1表示两个集合中都没有匹配的元素! memset(edge,0,sizeof(edge)); for(i=0; i<n; i++) { scanf("%d",&a[i]); if(a[i]%2==1) a1[nx++]=a[i]; else a2[ny++]=a[i]; } for(i=0; i<nx; i++) //初始化edge数组,如果两个数之和为素数,则edge[i][j]置1 { for(j=0; j<ny; j++) { if(prim[a1[i]+a2[j]])edge[i][j]=1; } } for(i=0; i<nx; i++) { if(cx[i]==-1) { memset(visited,0,sizeof(visited)); res+=path(i); } } printf("%d\n",res); }}
阅读全文
0 0
- 素数伴侣--最大二分匹配
- 最大二分匹配:最大“素数伴侣”问题
- 牛客网 素数伴侣(二分图最大匹配,匈牙利算法)
- 素数伴侣问题—>二部图最大匹配问题
- 素数伴侣
- 素数伴侣
- 素数伴侣
- OJ中-----素数伴侣(二分图,匈牙利算法)*?
- 最大二分匹配【转】
- poj1274 最大二分匹配
- 最大二分匹配
- 二分图最大匹配
- 二分图最大匹配 。
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图 最大匹配
- git切换分支
- python:并行化网格搜索中ImportError: [joblib] Attempting to do parallel computing without protecting...
- 虚拟DOM分析学习篇
- Java + tryCatch相关使用方法
- excel 身份证提取生日日期
- 素数伴侣--最大二分匹配
- 最大流最小割 UVA
- 爬取英语文章推送
- POJ 2352 Stars 题解
- Handler消息如何取消
- Convert BST to Greater Tree
- Unity异步加载场景与加载进度条
- C++第六次上机实验——项目2
- protobuf高效传输