首页 > 编程语言 > 详细

poj1469 二分图匹配(匈牙利算法)

时间:2016-07-14 03:00:25      阅读:298      评论:0      收藏:0      [点我收藏+]

poj1469 course

code:

#include<cstdio>
#include<cstring>
using namespace std;
#define P 110
#define N 310
int map[P][N];
int match[N];
bool use[N];
int p, n;

bool find(int u) //u是课程
{
    for(int i = 1; i <= n; ++i)
    {
        if(!use[i] && map[u][i]) //标记匹配的学生
        {
            use[i] = true;
            if(match[i] == - 1 || find(match[i]))
            {
                match[i] = u;
                return true;
            }
        }
    }
    return false;
}

int sum()
{
    int sumall = 0;
    for(int i = 1; i <= p; ++i) //统计匹配的课程
    {
        memset(use, false, sizeof(use));
        if(find(i))
            sumall++;
    }
    return sumall;
}

int main()
{
    int ncase;
    int stunum, temp, ans;
    scanf("%d", &ncase);
    while(ncase--)
    {
        memset(map, 0, sizeof(map));
        memset(match, -1, sizeof(match));
        scanf("%d%d", &p, &n);
        for(int i = 1; i <= p; ++i)
        {
            scanf("%d", &stunum);
            for(int j = 1; j <= stunum; ++j)
            {
                scanf("%d", &temp);
                map[i][temp] = 1; //j号学生喜欢i号课程
            }
        }
        ans = sum();
        printf("%s\n", ans == p ? "YES" : "NO");
    }
    return 0;
}

 

poj1469 二分图匹配(匈牙利算法)

原文:http://www.cnblogs.com/zhangjialu2015/p/5668598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!