[网络流24题-1]飞行员配对方案问题

飞行员配对方案

裸的二分图匹配。匈牙利和dinic均可过。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

bool bian[110][110],used[110];
int result[110],n,m;

bool dfs(int now)
{
    for(int i=1;i<=m;i++)
    {
        if(bian[now][i]&&!used[i])
        {
            used[i]=true;
            if(!result[i]||dfs(result[i]))
            {
                result[i]=now;
                return true;
            }
        }
    }
    return false;
}

int main()
{
    int i,j,ans=0;
    int x,y,flag;
    scanf("%d%d",&n,&m);
    scanf("%d%d",&x,&y);
    while(x!=-1&&y!=-1)
    {
        bian[x][y]=1;
        scanf("%d%d",&x,&y);
    }
    for(i=1;i<=n;i++)
    {
        memset(used,0,sizeof(used));
        if(dfs(i))	
        {
            ans++;
            flag=i;
        }
    }
    printf("%d\n",ans);
    for(i=1;i<=m;i++)
        if(result[i])
            printf("%d %d\n",result[i],i);
    return 0;
}

 

posted @ 2018-11-22 17:59  寒雨微凝  阅读(112)  评论(0编辑  收藏  举报