【COGS 14】 [网络流24题] 搭配飞行员 网络流板子题

用网络流水二分图的模型(存一下板子)

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 105
#define R register
#define inf 0x7f7f7f7f
using namespace std;
inline int read()
{
    R int sum=0;
    R char ch=getchar();
    while(ch<‘0‘||ch>‘9‘)ch=getchar();
    while(ch>=‘0‘&&ch<=‘9‘)
    {
        sum=(sum<<1)+(sum<<3)+ch-‘0‘;
        ch=getchar();
    }
    return sum;
}
struct V
{
    int to,next,w;
}c[N<<4];
int head[N],t=1;
int n,n1;
inline void add(int x,int y,int z)
{
    c[++t].to=y;
    c[t].next=head[x];
    c[t].w=z;
    head[x]=t;
}
inline void Init()
{
    scanf("%d%d",&n,&n1);
    R int x,y;
    while(scanf("%d%d",&x,&y)==2)
    {
        add(x,y,1);
        add(y,x,0);
    }
    for(int i=1;i<=n1;i++)
        add(n+1,i,1),add(i,n+1,0);
  for(int i=n1+1;i<=n;i++)
      add(i,n+2,1),add(n+2,i,0);
}
int q[N],top,tail,deep[N];
inline bool bfs()
{
    memset(deep,0,sizeof(deep));
    deep[n+1]=1;
    q[1]=n+1;
    top=tail=1;
    while(top<=tail)
    {
        R int x=q[top++];
        if(x==n+2)return 1;
        for(R int i=head[x];i;i=c[i].next)
        if(c[i].w&&deep[c[i].to]==0)
        {
            deep[c[i].to]=deep[x]+1;
            q[++tail]=c[i].to;
        }
    }
    return 0;
}
inline int Min(int x,int y)
{
    return x<y?x:y;
}
int dfs(int x,int v)
{
    if(x==n+2||!v)return v;
  R int ret=0;
     for(int i=head[x];i;i=c[i].next)
     if(c[i].w&&deep[c[i].to]==deep[x]+1)
     {
         R int f=Min(c[i].w,v);
         R int w=dfs(c[i].to,f);
         v-=w;
         ret+=w;
         c[i].w-=w;
         c[i^1].w+=w;
         if(v==0)break;
     }
     if(!ret)deep[x]=-1;
     return ret;
}
inline int dinic()
{
    R int ans=0;
    while(bfs())ans+=dfs(n+1,inf);
    return ans;
}
inline void Work()
{
    printf("%d",dinic());
}
int main()
{
      Init();
      Work();
      return 0;
}
时间: 2024-12-17 04:33:15

【COGS 14】 [网络流24题] 搭配飞行员 网络流板子题的相关文章

COGS 14. [网络流24题] 搭配飞行员

14. [网络流24题] 搭配飞行员 建边的时候要先从源点向主飞行员和从副飞行员向汇点连边 输入的时候只在两人之间连边 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 #define maxn 10000 5 #define inf 100000000 6 int n,m,src,dec,cur[maxn],ans,lev[maxn]; 7 int front[maxn],head,tail,que

14. [网络流24题] 搭配飞行员

14. [网络流24题] 搭配飞行员 ★★☆   输入文件:flyer.in   输出文件:flyer.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多. 如图,假设有10个驾驶员,如图中的V1,V2,…,V10就代表达10个驾驶员,其中V1,V2

[COGS 0014][网络流24题] 搭配飞行员

先贴题面 14. [网络流24题] 搭配飞行员 ★★☆   输入文件:flyer.in   输出文件:flyer.out简单对比时间限制:1 s   内存限制:128 MB [问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多. 如图,假设有10个驾驶员,如图中的V1,V2,…,V10就代表达10个驾驶员,其中V1,V

[网络流24题] 搭配飞行员

14. [网络流24题] 搭配飞行员 ★★☆   输入文件:flyer.in   输出文件:flyer.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多. 如图,假设有10个驾驶员,如图中的V1,V2,…,V10就代表达10个驾驶员,其中V1,V2,

COGS——C 14. [网络流24题] 搭配飞行员

http://cogs.pro/cogs/problem/problem.php?pid=14 ★★☆   输入文件:flyer.in   输出文件:flyer.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多. 如图,假设有10个驾驶员,如图中的V

COGS14. [网络流24题] 搭配飞行员

[问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多. 如图,假设有10个驾驶员,如图中的V1,V2,…,V10就代表达10个驾驶员,其中V1,V2,V3,V4,V5是正驾驶员,V6,V7,V8,V9,V10是副驾驶员.如果一个正驾驶员和一个副驾驶员可以同机飞行,就在代表他们两个之间连一条线,两个人不能同机飞行,就不连

cogs_14_搭配飞行员_(二分图匹配+最大流,网络流24题#01)

描述 http://cojs.tk/cogs/problem/problem.php?pid=14 有一些正飞行员和副飞行员,给出每个正飞行员可以和哪些副飞行员一起飞.一架飞机上必须一正一副,求最多多少飞机可以飞. 分析 裸的二分图匹配... 请叫我水题小王子... 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn=100+5,INF=0x7fffffff; 5 int n,m,cnt=1; 6 int l

网络流 搭配飞行员题解

14. [网络流24题] 搭配飞行员 ★★☆   输入文件:flyer.in   输出文件:flyer.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多. 如图,假设有10个驾驶员,如图中的V1,V2,-,V10就代表达10个驾驶员,其中V1,V2,

传说中的网络流24题

[网络流24题] 搭配飞行员 [问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多. 如图,假设有10个驾驶员,如图中的V1,V2,…,V10就代表达10个驾驶员,其中V1,V2,V3,V4,V5是正驾驶员,V6,V7,V8,V9,V10是副驾驶员.如果一个正驾驶员和一个副驾驶员可以同机飞行,就在代表他们两个之间连一条