您的位置:首页 > 其它

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

2016-07-13 23:08 447 查看
poj1469 course

code:

#include<cstdio>
#include<cstring>
using namespace std;
#define P 110
#define N 310
int map[P]
;
int match
;
bool use
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: