zoukankan      html  css  js  c++  java
  • P2756 飞行员配对方案问题

    P2756 飞行员配对方案问题

    题目背景

    第二次世界大战时期..

    题目描述

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

    输入输出格式

    输入格式:

    第 1 行有 2 个正整数 m 和 n。n 是皇家空军的飞行员总数(n<100);m 是外籍飞行员数(m<=n)。外籍飞行员编号为 1~m;英国飞行员编号为 m+1~n。

    接下来每行有 2 个正整数 i 和 j,表示外籍飞行员 i 可以和英国飞行员 j 配合。最后以 2个-1 结束。

    输出格式:

    第 1 行是最佳飞行员配对方案一次能派出的最多的飞机数 M。接下来 M 行是最佳飞行员配对方案。每行有 2个正整数 i 和 j,表示在最佳飞行员配对方案中,飞行员 i 和飞行员 j 配对。如果所求的最佳飞行员配对方案不存在,则输出‘No Solution!’。

    输入输出样例

    输入样例#1:
    5 10
    1 7
    1 8
    2 6
    2 9
    2 10
    3 7
    3 8
    4 7
    4 8
    5 10
    -1 -1

    输出样例#1: 复制

    4
    1 7
    2 9
    3 8
    5 10

    这大概是一个最简单的二分图匹配问题
    但是恕我直言这个题的spj写的……

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define N 105
    using namespace std;
    
    int be[N];
    int n,m;
    int line[N][N];
    int used[N];
    int girl[N];
    
    int find(int x){
        int j;
        for(j=1;j<=m;j++){    
            if(line[x][j]&&!used[j]){
                used[j]=1;
                if(!girl[j]||find(girl[j])){ 
                    girl[j]=x;
                    be[x]=j;
                    return j;
                }
            }
        }
        return false;
    }
    
    int pipei(){
        int all=0,i;
        for(i=1;i<=n;i++){
        	memset(used,0,sizeof(used));
        	if(find(i))
                all+=1;
        }
        return all;
    }
    
    int main(){
        cin>>n>>m;
        int a,b;
        cin>>a>>b;
        while(a!=-1){
            line[a][b]=1;
            cin>>a>>b;
        }
        cout<<pipei()<<endl;
        for(int i=1;i<=n;++i)
            if(be[i])
                cout<<i<<' '<<be[i]<<endl;
        return 0;
    }
    
  • 相关阅读:
    Luogu P3731 [HAOI2017]新型城市化
    Luogu P3227 [HNOI2013]切糕 最小割
    Luogu P1654 OSU!
    CF235B Let's Play Osu! 期望dp
    Luogu P2057 [SHOI2007]善意的投票
    任意模数NTT学习笔记
    Burnside引理的感性证明
    JLOI2015 城池攻占
    BZOJ2957 楼房重建
    NOI2009 区间
  • 原文地址:https://www.cnblogs.com/qdscwyy/p/7989581.html
Copyright © 2011-2022 走看看