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

来源:互联网 发布:linux ext3 ext4 区别 编辑:程序博客网 时间:2024/05/18 03:04






http://www.51nod.com/onlineJudge/questionCode.html#!problemId=2006







分析:

只写了匈牙利   网络流还没有写



AC代码:

#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <vector>#include <stack>#include <queue>#include <map>#include <set>#include<list>#include <bitset>#include <climits>#include <algorithm>#define gcd(a,b) __gcd(a,b)#define FINfreopen("input.txt","r",stdin)#define FOUT freopen("output.txt","w",stdout)typedef long long LL;const LL mod=1e9+7;const int INF=0x3f3f3f3f;const double PI=acos(-1.0);using namespace std;int map0[105][105];int vis[105];int ans[105];int n,m;int find(int x){    for (int j=m+1;j<=n;j++){        if (map0[x][j]&&!vis[j]){            vis[j]=1;            if (!ans[j]||find(ans[j])){                ans[j]=x;                return 1;            }        }    }    return 0;}int main (){    //FIN;    while (scanf ("%d%d",&m,&n)!=EOF){        int x,y;        memset(map0,0,sizeof(map0));        memset(ans,0,sizeof(ans));        while (scanf ("%d%d",&x,&y)&&x!=-1&&y!=-1){            map0[x][y]=1;        }        LL sum=0;        for (int i=1;i<=m;i++){            memset(vis,0,sizeof(vis));            if (find(i))                sum++;        }        printf ("%lld\n",sum);    }    return 0;}


阅读全文
0 0