zoukankan      html  css  js  c++  java
  • 51nod 2006 飞行员配对(二分图最大匹配)

    第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的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
    如题,二分匹配模板题,但是我觉得二分匹配应该可以优化。。。
     1 #include <iostream>
     2 using namespace std;
     3 #include<string.h>
     4 #include<set>
     5 #include<stdio.h>
     6 #include<math.h>
     7 #include<queue>
     8 #include<map>
     9 #include<algorithm>
    10 #include<cstdio>
    11 #include<cmath>
    12 #include<cstring>
    13 #include <cstdio>
    14 #include <cstdlib>
    15 #include<stack>
    16 #include<vector>
    17 int  dp[110][110];
    18 int lianjie[110];
    19 int a[110];
    20 int n,m;
    21 int balalanengliang(int t)
    22 {
    23     for(int i=n+1;i<=m;i++)
    24     {
    25         if(!a[i]&&dp[t][i])
    26         {
    27             a[i]=1;
    28             if(!lianjie[i]||balalanengliang(lianjie[i]))
    29             {
    30                 lianjie[i]=t;
    31                 return 1;
    32             }
    33         }
    34     }
    35     return 0;
    36 }
    37 int main()
    38 {
    39 
    40     cin>>n>>m;
    41     int x,y;
    42     memset(dp,0,sizeof(dp));
    43     int sum=0;
    44     while(cin>>x>>y,x!=-1,y!=-1)
    45     {
    46         dp[x][y]=1;
    47     }
    48     for(int i=1;i<=n;i++)
    49     {
    50         memset(a,0,sizeof(a));
    51         if(balalanengliang(i))
    52             sum++;
    53     }
    54     cout<<sum<<endl;
    55     return 0;
    56 }
    View Code
  • 相关阅读:
    android service
    Java 枚举7常见种用法
    SkylineGlobe Android 开发 面积计算示例代码
    SkylineGlobe 6.6 版本API更新
    SkylineGlobe 移动端开发测试
    SkylineGlobe 如何二次开发获取三维模型的BBOX和设置Tint属性
    SkylineGlobe 如何二次开发实现天际线分析功能
    SkylineGlobe API 如何以图层的方式导入MPT地形
    SkylineGlobe 如何使用二次开发接口创建粒子效果
    SkylineGlobe 支持火狐和谷歌浏览器的可运行示例代码
  • 原文地址:https://www.cnblogs.com/dulute/p/7966667.html
Copyright © 2011-2022 走看看