http://cogs.pro/cogs/problem/problem.php?pid=14

★★☆   输入文件:flyer.in   输出文件:flyer.out   简单对比
时间限制:1 s   内存限制:128 MB

【问题描述】
    飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员。由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多。

 
如图,假设有10个驾驶员,如图中的V1,V2,…,V10就代表达10个驾驶员,其中V1,V2,V3,V4,V5是正驾驶员,V6,V7,V8,V9,V10是副驾驶员。如果一个正驾驶员和一个副驾驶员可以同机飞行,就在代表他们两个之间连一条线,两个人不能同机飞行,就不连。例如V1和V7可以同机飞行,而V1和V8就不行。请搭配飞行员,使出航的飞机最多。注意:因为驾驶工作分工严格,两个正驾驶员或两个副驾驶员都不能同机飞行.
 
【输入格式】
输入文件有若干行
第一行,两个整数n与n1,表示共有n个飞行员(2<=n<=100),其中有n1名飞行员是正驾驶员.
下面有若干行,每行有2个数字a,b。表示正驾驶员a和副驾驶员b可以同机飞行。
注:正驾驶员的编号在前,即正驾驶员的编号小于副驾驶员的编号.
【输出格式】
输出文件有一行
第一行,1个整数,表示最大起飞的飞机数。
【输入输出样例】
输入文件名: flyer.in
10 5 
1 7 
2 6 
2 10 
3 7 
4 8 
5 9 
 
输出文件名:flyer.out
4
 
网络流跑二分图建图模板
 #include <algorithm>
#include <cstring>
#include <cstdio> using namespace std; const int INF(0x7fffffff);
const int N();
int n,n1,u,v,w; int head[N],sumedge;
struct Edge
{
int to,next,val;
Edge(int to=,int next=,int val=):
to(to),next(next),val(val){}
}edge[N<<];
inline void ins(int u,int v,int w)
{
edge[++sumedge]=Edge(v,head[u],w);
head[u]=sumedge;
}
struct Type_AC
{
int s,t,ret;
int deep[N];
bool BFS()
{
memset(deep,-,sizeof(deep));
int tail=,hd=,que[N];
deep[s]=; que[tail++]=s;
for(;hd<tail;)
{
int fro=que[hd++];
for(int i=head[fro];i;i=edge[i].next)
{
int v=edge[i].to;
if(deep[v]==-&&edge[i].val)
{
deep[v]=deep[fro]+;
que[tail++]=v;
}
}
}
if(deep[t]!=-) return true;
return false;
}
int DFS(int now,int flow)
{
if(now==t||!flow) return flow;
int go,flux=;
for(int i=head[now];i;i=edge[i].next)
{
int v=edge[i].to;
if(deep[v]!=deep[now]+||edge[i].val<=) continue;
go=DFS(v,min(edge[i].val,flow-flux));
edge[i].val-=go;
edge[i^].val+=go;
flux+=go;
if(flux==flow) return flow;
}
if(!flux) deep[now]=-;
return flux;
}
void Dinic()
{
for(;BFS();) ret+=DFS(s,INF);
}
}I_want_AC; int main()
{
freopen("flyer.in","r",stdin);
freopen("flyer.out","w",stdout); scanf("%d%d",&n,&n1);
for(int i=;i<=n1;i++) ins(,i,),ins(i,,);
for(int i=n1+;i<=n;i++) ins(i,n+,),ins(n+,i,);
for(;~scanf("%d%d",&u,&v);) ins(u,v,); ins(v,u,);
I_want_AC.s=;
I_want_AC.t=n+;
I_want_AC.Dinic();
printf("%d\n",I_want_AC.ret);
return ;
}

最新文章

  1. ASP.NET Aries 入门开发教程5:自定义列表页工具栏区
  2. jQuery之DOM属性
  3. ajax、post、get实例
  4. JAVA - Comparable接口 与 Comparator接口
  5. build/core/base_rules.mk:195: already define
  6. 对于数据操作的SQL语句精粹(长期更新)
  7. Jquery Validate 表单验证的多种方式
  8. shell初学
  9. redis集群添加删除节点
  10. angular $compiler
  11. oracle表中字段的添加、删除
  12. java线程安全问题以及使用synchronized解决线程安全问题的几种方式
  13. c++运行时函数
  14. 小强的HTML5移动开发之路(6)——Canvas图形绘制基础
  15. Sqlserver 连接oracle和mysql数据库 已经oracle导入sqlserver表数据
  16. 关于SpringBoot 2.0,Pageable 无法注入,提示缺少默认构造方法的解决办法
  17. day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
  18. js实现四叉树算法
  19. 玩转X-CTR100 l STM32F4 l BMP280气压计传感器
  20. BZOJ 1951SDOI2010 古代猪文

热门文章

  1. codeforces 140E.New Year Garland
  2. Deepin for Linux 下串口调试交换机
  3. IBM将收购Linux发行商红帽公司,继续发力云计算市场
  4. whereis---定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。
  5. 深入理解 GRE tunnel
  6. android 图片特效处理之光晕效果
  7. js --- 事件流
  8. 项目: 更新(二) python 实现大概FTP的功能
  9. 洛谷P1439 最长公共子序列(LCS问题)
  10. 平板电脑上完美体验Windows 8 (视频)