网络流24题 第一题 - 洛谷2756 飞行员配对方案 二分图匹配 匈牙利算法

Posted tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络流24题 第一题 - 洛谷2756 飞行员配对方案 二分图匹配 匈牙利算法相关的知识,希望对你有一定的参考价值。

欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解

 

题目传送门

题意概括

裸的二分图匹配

 

题解

匈牙利算法

上板子

 

代码

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=100+5;
int m,n,a,b,match[N],x[N],y[N];
bool g[N][N],vis[N];
bool dfs(int k){
    for (int i=1;i<=n;i++)
        if (g[k][i]&&!vis[i]){
            vis[i]=1;
            if (match[i]==-1||dfs(match[i])){
                match[i]=k;
                return 1;
            }
        }
    return 0;
}
int main(){
    memset(g,0,sizeof g);
    scanf("%d%d",&m,&n);
    while (scanf("%d%d",&a,&b)&&(a!=-1&&b!=-1))
        g[a][b]=g[b][a]=1;
    memset(match,-1,sizeof match);
    int cnt=0;
    for (int i=1;i<=n-m;i++){
        memset(vis,0,sizeof vis);
        if (dfs(i+m))
            cnt++;
    }
    int tot=0;
    for (int i=1;i<=m;i++)
        if (match[i]!=-1)
            x[++tot]=i,y[tot]=match[i];
    if (tot==0)
        printf("No Solution!");
    else
        printf("%d\\n",tot);
    for (int i=1;i<=tot;i++)
        printf("%d %d\\n",x[i],y[i]);
    return 0;
}

 

以上是关于网络流24题 第一题 - 洛谷2756 飞行员配对方案 二分图匹配 匈牙利算法的主要内容,如果未能解决你的问题,请参考以下文章

网络流24题Luogu P2756飞行员配对方案问题

[网络流24题]飞行员配对方案问题

luogu P2756 飞行员配对方案问题 网络流24

网络流24题小结

[洛谷P2756]飞行员配对方案问题

网络流24题第一题(luogu2796飞行员配对方案)