51nod 2006 二分图最大匹配

来源:互联网 发布:浙江贰贰网络稳定吗 编辑:程序博客网 时间:2024/06/06 01:00

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

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注
第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的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

思路

匈牙利算法详解
http://blog.csdn.net/feynman1999/article/details/76037992

题解:

裸的二分图最大匹配,注意编号1-m

代码:

#include <bits/stdc++.h>using namespace std;const int maxn=105;const int maxm=1e5+10;struct Edge{    int to,next;}edge[maxm];int head[maxn],tot;void init(){    tot = 0;    memset(head,-1,sizeof(head));    return ;}void addedge(int u,int v){    edge[tot].to = v;    edge[tot].next = head[u];    head[u]=tot++;    return ;}int linker[maxn];bool used[maxn];int uN,n;bool dfs(int u){    for(int i=head[u];i!=-1;i=edge[i].next)    {        int v = edge[i].to;        if(!used[v])        {            used[v] = true;            if(linker[v]==-1 || dfs(linker[v]))            {                linker[v]=u;                return true;            }        }    }    return false;}int hungary(){    int res = 0;    memset(linker,-1,sizeof(linker));    for(int u=1;u<=uN;u++)    {        memset(used,false,sizeof(used));        if(dfs(u))        {            res++;        }    }    return res;}int main(){    init();    cin>>uN>>n;    int x,y;    while(cin>>x>>y)    {        if(x==-1&&y==-1) break;        addedge(x,y);    }    int ans = hungary();    cout<<ans<<endl;    return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 未满16岁怎么办身份证 放弃继承权后想反悔怎么办 上海居住证积分中社保断怎么办 换驾驶证但是身份证地址变动怎么办 驾驶证b证扣分了怎么办 c1驾证过期没审怎么办 驾照报名三年过期了怎么办 新车行驶证过期了怎么办 行驶证忘了审怎么办 摩托车驾驶证副本丢了怎么办 人被全险车撞了怎么办 被全险车撞了怎么办 驾驶证和行驶证遗失怎么办 户口迁移身份证没换驾照怎么办 户口迁回时身份证掉了怎么办 户口毕业托管身份证掉了怎么办 身份证和户口都掉了怎么办 毕业生户口迁回原籍没身份证怎么办 落户上海后怎么办医保卡 小车临时牌过期了怎么办 驾驶证地址错了一个字怎么办 驾驶证名下车辆有违章怎么办 a2如果扣12分怎么办 b2一次超速12分怎么办 b2本扣了12分怎么办 驾照扣了27分怎么办 大车一次扣12分怎么办 a2驾照扣10分怎么办 驾驶证强制降级没给驾驶证怎么办 6P升11.2卡了怎么办 b2驾照记满12分怎么办 c1驾驶证没分了怎么办 驾照扣了15分怎么办 驾驶证暂扣六个月后怎么办 醉驾交警不通知怎么办 参军后地方驾驶证年审怎么办 军人驾驶证到期身份证注销了怎么办 资格证脱审30天怎么办 驾驶证c证扣6分怎么办 驾照被扣了9分怎么办 驾驶证被扣了9分怎么办