hdu 5594 ZYB's Prime 最大流
ZYB's Prime
Time Limit: 20 Sec
Memory Limit: 256 MB
题目连接
http://acm.hdu.edu.cn/showproblem.php?pid=5594
Description
After getting 600 scores in NOIP,ZYB(ZJ−267) creates a problem:you are given N numbers,now you are asked to divide them into K groups(K≥1),the
number of each group must be no less than 3,and put all the numbers in a group into a ring,the sum of every two adjacent numbers must be a prime.ZYB want to ask
you whether the N numbers can be divided or not?
Input
In the first line there is the testcase T.
For each teatcase:
In the first line there is one number N.
In the next line there are N numbers Ai.
1≤T≤50,1≤N≤200,1≤Ai≤200,for 60% cases N≤20.
Output
For each testcase,print the YES or NO.
Sample Input
2
7
3 4 8 9 1 1 1
3
1 2 3
Sample Output
YES
NO
HINT
题意
题解:
代码:
- #include<iostream>
- #include<stdio.h>
- #include<vector>
- #include<cstring>
- using namespace std;
- namespace NetFlow
- {
- const int MAXN=,MAXM=,inf=1e9;
- struct Edge
- {
- int v,c,f,nx;
- Edge() {}
- Edge(int v,int c,int f,int nx):v(v),c(c),f(f),nx(nx) {}
- } E[MAXM];
- int G[MAXN],cur[MAXN],pre[MAXN],dis[MAXN],gap[MAXN],N,sz;
- void init(int _n)
- {
- N=_n,sz=; memset(G,-,sizeof(G[])*N);
- }
- void link(int u,int v,int c)
- {
- E[sz]=Edge(v,c,,G[u]); G[u]=sz++;
- E[sz]=Edge(u,,,G[v]); G[v]=sz++;
- }
- int ISAP(int S,int T)
- {//S -> T
- int maxflow=,aug=inf,flag=false,u,v;
- for (int i=;i<N;++i)cur[i]=G[i],gap[i]=dis[i]=;
- for (gap[S]=N,u=pre[S]=S;dis[S]<N;flag=false)
- {
- for (int &it=cur[u];~it;it=E[it].nx)
- {
- if (E[it].c>E[it].f&&dis[u]==dis[v=E[it].v]+)
- {
- if (aug>E[it].c-E[it].f) aug=E[it].c-E[it].f;
- pre[v]=u,u=v; flag=true;
- if (u==T)
- {
- for (maxflow+=aug;u!=S;)
- {
- E[cur[u=pre[u]]].f+=aug;
- E[cur[u]^].f-=aug;
- }
- aug=inf;
- }
- break;
- }
- }
- if (flag) continue;
- int mx=N;
- for (int it=G[u];~it;it=E[it].nx)
- {
- if (E[it].c>E[it].f&&dis[E[it].v]<mx)
- {
- mx=dis[E[it].v]; cur[u]=it;
- }
- }
- if ((--gap[dis[u]])==) break;
- ++gap[dis[u]=mx+]; u=pre[u];
- }
- return maxflow;
- }
- bool bfs(int S,int T)
- {
- static int Q[MAXN]; memset(dis,-,sizeof(dis[])*N);
- dis[S]=; Q[]=S;
- for (int h=,t=,u,v,it;h<t;++h)
- {
- for (u=Q[h],it=G[u];~it;it=E[it].nx)
- {
- if (dis[v=E[it].v]==-&&E[it].c>E[it].f)
- {
- dis[v]=dis[u]+; Q[t++]=v;
- }
- }
- }
- return dis[T]!=-;
- }
- int dfs(int u,int T,int low)
- {
- if (u==T) return low;
- int ret=,tmp,v;
- for (int &it=cur[u];~it&&ret<low;it=E[it].nx)
- {
- if (dis[v=E[it].v]==dis[u]+&&E[it].c>E[it].f)
- {
- if (tmp=dfs(v,T,min(low-ret,E[it].c-E[it].f)))
- {
- ret+=tmp; E[it].f+=tmp; E[it^].f-=tmp;
- }
- }
- }
- if (!ret) dis[u]=-; return ret;
- }
- int dinic(int S,int T)
- {
- int maxflow=,tmp;
- while (bfs(S,T))
- {
- memcpy(cur,G,sizeof(G[])*N);
- while (tmp=dfs(S,T,inf)) maxflow+=tmp;
- }
- return maxflow;
- }
- }
- using namespace NetFlow;
- int One;
- vector<int> Even,Odd;
- const int MAXN_ = ;
- bool _flag[MAXN_];
- int _primes[MAXN_], _pi;
- void GetPrime_1()
- {
- int i, j;
- _pi = ;
- memset(_flag, false, sizeof(_flag));
- for (i = ; i < MAXN_; i++)
- if (!_flag[i])
- {
- _primes[i] = ;//素数标识为1
- for (j = i; j < MAXN_; j += i)
- _flag[j] = true;
- }
- }
- void Clear()
- {
- Even.clear();
- Odd.clear();
- init();
- One=;
- }
- bool work()
- {
- int n;scanf("%d",&n);
- int flag = ;
- for(int i=;i<=n;i++)
- {
- int x;scanf("%d",&x);
- if(x==)One++;
- else if(x%==)Odd.push_back(x);
- else Even.push_back(x);
- }
- if(Odd.size()>Even.size())return ;
- if(Odd.size()+One<Even.size())return ;
- int In = ;
- while(Odd.size()<Even.size())
- {
- flag = ;
- Odd.push_back();
- One--;
- In++;
- }
- if(flag==&&(One==||One==))return ;
- int tmp = ;
- for(int i=;i<Odd.size();i++)
- link(,+i,);
- for(int i=;i<Even.size();i++)
- link(n++i,,);
- for(int i=;i<Odd.size();i++)
- {
- for(int j=;j<Even.size();j++)
- {
- if(_primes[Odd[i]+Even[j]])
- {
- if(Odd[i]==&&One>&&In>)
- link(+i,n++j,);
- else
- link(+i,n++j,);
- }
- }
- }
- if(Even.size()*==dinic(,))return ;
- return ;
- }
- int main()
- {
- GetPrime_1();
- int t;
- scanf("%d",&t);
- for(int cas=;cas<=t;cas++)
- {
- Clear();
- printf("%s\n",work()?"YES":"NO");
- }
- }
hdu 5594 ZYB's Prime 最大流的更多相关文章
- HDU 3549 Flow Problem(最大流)
HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- hdu 6214 Smallest Minimum Cut[最大流]
hdu 6214 Smallest Minimum Cut[最大流] 题意:求最小割中最少的边数. 题解:对边权乘个比边大点的数比如300,再加1 ,最后,最大流对300取余就是边数啦.. #incl ...
- HDU(2485),最小割最大流
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2485 Destroying the bus stations Time Limit: 40 ...
- hdu 2686 Matrix 最小费用最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 Yifenfei very like play a number game in the n*n ...
- hdu 5592 ZYB's Game 树状数组
ZYB's Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=55 ...
- hdu 5591 ZYB's Game 博弈论
ZYB's Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=55 ...
- HDU 5590 ZYB's Biology 水题
ZYB's Biology Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid ...
- hdu 5268 ZYB loves Score 水题
ZYB loves Score Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- hdu 4494 Teamwork 最小费用最大流
Teamwork Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4494 ...
随机推荐
- Cent OS5.2安装Hyper-V集成光盘
一.Hyper-V安装windows系统没有问题,windows2000以后系统都可以,一切顺利. 驱动程序:IDE.SCSI.网络.视频和鼠标 要想实现更强的功能,宿主机需要安装Hyper-V集成光 ...
- UITableViewCell 自定义绘制 性能高
// // FoodListTableViewCellB.m // BabyFood // // Created by zhuang chaoxiao on 16/3/7. // Copyri ...
- SpringMVC 3.1集成Spring Security 3.1
这篇算是一个入门文章,昨天看见有网友提问,spring mvc集成spring security 的时候出错,揣测了一下问题木有解决.我就帮忙给搭建了一个集成框架他说可以,他告诉我这样的文章网上少.今 ...
- [python]Python操作MySQL
[安装] 安装MySQL 安装MySQL不用多说了,下载下来安装就是,没有特别需要注意的地方. 一个下载地址:点击打开链接 [样例] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- TopFreeTheme精选免费模板【20130629】
今天给大家推荐9款最新精选的WordPress主题,它们涵盖了新闻.杂志.博客.房地产方面的主题.有些是商业模板,但现在都可以免费下载. GeoPlaces v4.6.2 – 来自Templatic的 ...
- delphi 压缩ZLib
system.ZLib http://docwiki.embarcadero.com/CodeExamples/Berlin/en/ZLibCompressDecompress_(Delphi) 还不 ...
- ubuntu下设置开机自动挂载硬盘
我们在linux中常常用mount命令把硬盘分区或者光盘挂载到文件系统中./etc/fstab就是在开机引导的时候自动挂载到linux的文件系统. 如果给计算机配了一块新磁盘,已经分区,格式化,挂载, ...
- ICON的设计很重要
ICON的设计很重要 发布者: wuye | 发布时间: 2014-12-19 17:45| 评论数: 0 游戏类型:手游游戏/平板游戏 设计类型:[功能/模块/UI] 作者:小金狮的UI分享 每个 ...
- 细说OpenSessionInView问题
[环境参数] 环境:SSH框架 [问题描述] NoSession问题 HibernateTemplate对象提供的方法如果使用“延迟加载”,Session对象的管理不受开发者控制,此时如果在表现层获 ...
- hdu 5475 An easy problem(暴力 || 线段树区间单点更新)
http://acm.hdu.edu.cn/showproblem.php?pid=5475 An easy problem Time Limit: 8000/5000 MS (Java/Others ...