51nod 2006 飞行员配对(二分图最大匹配//匈牙利算法)

原创 2018年04月15日 11:46:37

第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2名飞行员,其中1名是英国飞行员,另1名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。如何选择配对飞行的飞行员才能使一次派出最多的飞机。对于给定的外籍飞行员与英国飞行员的配合情况,试设计一个算法找出最佳飞行员配对方案,使皇家空军一次能派出最多的飞机 。对于给定的外籍飞行员与英国飞行员的配合情况,编程找出一个最佳飞行员配对方案,使皇家空军一次能派出最多的飞机。 



Input
第1行有2个正整数 m 和 n。n 是皇家空军的飞行 员总数(n<100);m 是外籍飞行员数。外籍飞行员编号为 1~m;英国飞行员编号为 m+1~n。接下来每行有 2 个正整数 i 和 j,表示外籍飞行员 i 可以和英国飞行员 j 配合。输入最后以 2 个-1 结束。
Output
第 1 行是最佳飞行 员配对方案一次能派出的最多的飞机数 M。如果所求的最佳飞行员配对方案不存在,则输出‘No Solution!’。
Input示例
5 10
1 7
1 8
2 6
2 9
2 10
3 7
3 8
4 7
4 8
5 10
-1 -1
Output示例
4

基本的匈牙利算法,模板题。下面给出代码


#include<bits/stdc++.h> //无耻的万能头文件
using namespace std;
int m,n,G[505][505],biao[1005],fly[1005],i,j,num; //G数组用来标记是否可以配对
int DFS(int x)
{
    for(int i=m+1;i<=n;i++)     //从每一名飞行员开始筛选
    {                                
        if(G[x][i]==1&&biao[i]==0)    //检测外籍能否和飞行员匹配并且没有被访问过
        { 
              biao[i]=1; //标记已被访问,其实是为了后面可能为x腾出位置做准备
           if(fly[i]==0||DFS(fly[i])) //看是否能腾出位置给x 
           {
               fly[i]=x;
             return 1;
           }
        }
    }
    return 0;
}
int main()
{
    ios::sync_with_stdio(false); //加快读入速度 
    cin>>m>>n;
    while(cin>>i>>j) 
    {
        if(i==-1&&j==-1) break;
        G[i][j]=1;  //读入可否匹配
    }
    for(int i=1;i<=m;i++)
    {   memset(biao,0,sizeof(biao)); //注意标记数组的每次清零!(细节)
        if(DFS(i)) num++; 

    }
    cout<<num<<endl;
    return 0;
}

51Nod-2006-飞行员配对(二分图最大匹配)

ACM模版描述题解这个题的来源是网络流24题,貌似是一个十分不错的网络流习题集,暑假抽空做做吧!越学习,越发现自己是一个大大的菜鸡,心痛啊~~~我网络流都不会……这个题很明显是一个二分图的最大匹配问题...
  • f_zyj
  • f_zyj
  • 2017-06-21 03:55:53
  • 676

51Nod-2006 飞行员配对(二分图最大匹配,匈牙利算法)

2006 飞行员配对(二分图最大匹配) 题目来源: 网络流24题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 第二次世界大战时期,英国皇家空军从沦...
  • hg_zhh
  • hg_zhh
  • 2017-09-03 12:36:05
  • 140

51nod 2006 飞行员配对(二分图最大匹配)

裸题 #include using namespace std; int n,m,mp[505][505],match[505],used[505]; bool find(int x) { in...
  • xin_jun
  • xin_jun
  • 2017-06-26 13:44:14
  • 214

51nod 2006 飞行员配对(二分图最大匹配)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=2006 分析: 只...
  • MM__1997
  • MM__1997
  • 2017-08-24 20:39:24
  • 298

51Nod_2006飞行员配对

  这是一道二分图匹配题,具体的结题思路就是使用匈牙利算法,而这个算法基本是二分图匹配题的核心算法,代码也不难,值得去深入理解一下函数中对递归的使用和函数的书写思想。具体可以参考下面的内容。注:以下内...
  • qq_36735125
  • qq_36735125
  • 2018-04-07 10:47:33
  • 20

二分图的最大匹配、完美匹配和匈牙利算法

二分图的最大匹配、完美匹配和匈牙利算法 2013-08-01Algorithms二分图匹配, 图论, 算法 这篇文章讲无权二分图(unweighted bipartite graph)的最...
  • pi9nc
  • pi9nc
  • 2013-09-20 15:38:15
  • 65051

51Nod 2006:飞行员配对(二分图最大匹配,匈牙利算法)

二分图最大匹配,入门题。
  • wyxeainn
  • wyxeainn
  • 2017-08-16 15:15:43
  • 248

51Nod 2006 飞行员配对(二分图最大匹配) 匈牙利算法

题目链接 1:第一个英国飞行员和他喜欢的第一个外国飞行员配对。配对成功对第二个飞行员配对 2:如果第二个飞行员喜欢的第一个外国飞行员就是第一个飞行员配对的外国飞行员,然后对第一个英国飞行员...
  • qq_33193309
  • qq_33193309
  • 2017-09-10 16:54:19
  • 206

二分图的基本概念+二分图的最大匹配问题(匈牙利算法)

今天学了二分图的最大匹配,其中的匈牙利算法。。哦不,其实远不止这个,还有后面的一系列KM、开花树啊什么的算法。反正又是一个异常懵逼的一天。。。 我觉得应该是上课前没有稍微预习一下这个算法是什么,了解个...
  • x_y_q_
  • x_y_q_
  • 2016-07-15 20:05:41
  • 4693

#1122 : 二分图二•二分图最大匹配之匈牙利算法

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上一回我们已经将所有有问题的相亲情况表剔除了,那么接下来要做的就是安排相亲了。因为过年时间...
  • wang2534499
  • wang2534499
  • 2015-07-25 10:51:42
  • 535
收藏助手
不良信息举报
您举报文章:51nod 2006 飞行员配对(二分图最大匹配//匈牙利算法)
举报原因:
原因补充:

(最多只允许输入30个字)