码迷,mamicode.com
首页 > 其他好文 > 详细

luogu2756 飞行员配对方案问题

时间:2018-06-27 19:31:25      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:cstring   include   ==   mat   iostream   main   long   size   stream   

匈牙利:

4 8
1 5
1 6
2 5
3 5
3 7
4 5
4 7
4 8
-1 -1

 

out:4

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
int n,m,line[105][105],have[105],vis[105];/////
int work(int u)
{
    for(int v=m+1;v<=n;v++)
    {
        if(line[u][v]==1 && !vis[v])//2-5要成立,1就不能访问5 ,否则5->1,1->5死循环了 
        {
            vis[v]=1;
            if(!have[v] || work(have[v])==1)
            {
                have[v]=u;
                return 1;
            }
        }
    }
    return 0;
}
int x,y,cnt;
int main()
{
    scanf("%d%d",&m,&n);
    scanf("%d%d",&x,&y);//x是外籍飞行员1~m, y是皇家飞行员m+1~n
    while(x!=-1 && y!=-1 )
    {
        line[x][y]=1;
        scanf("%d%d",&x,&y);    
    }    
    memset(have,0,sizeof have); 
    for(int i=1;i<=m;i++)
    {
        memset(vis,0,sizeof vis);
        if(work(i)==1) cnt++;
    }
    printf("%d\n",cnt);
    if(cnt==0) {cout<<"No Solution!"<<endl;return 0;} 
    for(int i=m+1;i<=n;i++)
    {
        if(have[i]>0)
            printf("%d %d\n",have[i],i);
    }
    return 0;
}

 

luogu2756 飞行员配对方案问题

标签:cstring   include   ==   mat   iostream   main   long   size   stream   

原文地址:https://www.cnblogs.com/caterpillor/p/9235626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!