杭电ACM1068(匈牙利算法)

原创 2015年11月20日 15:10:44

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068

题目大意:有人要研究学生间的浪漫关系,为了研究方便,必须参加研究的学生任意两人之间都没有浪漫关系,目前情况是有一些学生之间已经有了浪漫关系,从中选择符合条件的学生,问最多可以找到多少满足上述条件的学生。

解题思路:匈牙利算法。本题要求任意两人都没有关系的人数,也就是最大独立集,而二分图的最大独立集=节点数-最大匹配数。并且给出的数据不分男女,因此把得到的数据除以2才是真正的最大匹配数。

AC代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MAX 1005
bool used[MAX];
int linked[MAX];
int g[MAX][MAX];
int n;
bool dfs(int u)
{
	int v;
	for(v=0;v<n;v++)
	{
		if(g[u][v]&&!used[v])
		{
			used[v] = true;
			if(linked[v]==-1||dfs(linked[v]))
			{
				linked[v] = u;
				return true;
			}
		}
	}
	return false;
}


int hungry()
{
	int u;
	int result=0;
	memset(linked,-1,sizeof(linked));
	for(u=0;u<n;u++)
	{
		memset(used,0,sizeof(used));
		if(dfs(u))result++;
	}
	return result;
}
int main()
{
	int u,v;
	int num;
	while(cin>>n)
	{
		memset(g,0,sizeof(g));
		for(int i=0;i<n;i++)
		{
			scanf("%d: (%d)",&u,&num);
			for(int j=0;j<num;j++)
			{
				cin>>v;
				g[i][v] = 1;
			}
		}
		cout<<n-hungry()/2<<endl;
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

hdu 1068 Girls and Boys(匈牙利算法求最大独立集)

Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)...

ACM匈牙利算法

  • 2015年03月06日 22:12
  • 449B
  • 下载

【原创】二分图匹配 与 匈牙利算法

二分图先来看看什么是二分图。二分图的概念部图在了解二分图之前,我们现在看看图论中的部图。 部图在图论中有这样的定义: 一个图的节点集可分成若干个子集,使得每一条边的两端点不在同一子集内.若一个图...

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

  • 2010年01月12日 10:45
  • 2KB
  • 下载

匈牙利算法

  • 2014年03月06日 16:24
  • 6.07MB
  • 下载

匈牙利算法求二分图的最优匹配(java)

算法应用场景: 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术。不幸的是,由于工程问题,每个牛栏都不一样。第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都...

匈牙利算法及程序

  • 2013年06月14日 19:49
  • 4KB
  • 下载

匈牙利算法java实现

  • 2012年12月06日 11:12
  • 3KB
  • 下载

POJ_P1274 The Perfect Stall(二分图匹配+匈牙利算法)

Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21468 Accepted: 9664 Descri...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:杭电ACM1068(匈牙利算法)
举报原因:
原因补充:

(最多只允许输入30个字)