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

HDU 2063 过山车

时间:2016-06-03 12:37:24      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

没救了

二分图的最大匹配

#include <iostream>
#include <memory>
using namespace std;

#define MAX 510
int K, M, N;
//X女 Y男
int G[MAX][MAX];
//记录当前男生配对情况
//配给哪个女生
int marry[MAX];
//记录男生访问情况
int visit[MAX];

int findPair(int x) {
    //对应每一个男生
    for (int lop = 0; lop < N; lop++) {
        //没配对或者已访问
        if (!G[x][lop] || visit[lop]) {
            continue;
        }
        visit[lop] = 1;
        //当前男生没配对
        //或者配对的那个女生还能找到配对
        if (marry[lop] == -1 || findPair(marry[lop])) {
            marry[lop] = x;
            return 1;
        }
    }
    return 0;
}

int main() {
    while (cin >> K, K != 0) {
        cin >> M >> N;
        //初始化
        memset(G, 0, sizeof(G));
        memset(marry, -1, sizeof(marry));
        //建立图
        for (int lop = 0; lop < K; lop++) {
            int a, b;
            cin >> a >> b;
            G[a - 1][b - 1] = 1;
        }
        int count = 0;

        //从每一个女生开始找
        for (int lop = 0; lop < M; lop++) {
            memset(visit, 0, sizeof(visit));
            if (findPair(lop)) {
                count++;
            }
        }
        cout << count << endl;
    }
    return 0;
}

 

HDU 2063 过山车

标签:

原文地址:http://www.cnblogs.com/makejeffer/p/5555701.html

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