hdoj 1068 Girls and Boys【匈牙利算法+最大独立集】

Girls and Boys

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8470    Accepted Submission(s): 3890

Problem Description

the second year of the university somebody started a study on the romantic relations between the students. The relation “romantically involved” is defined between one girl and one boy. For the study reasons it is necessary to find out the maximum set satisfying the condition: there are no two students in the set who have been “romantically involved”. The result of the program is the number of students in such a set.

The input contains several data sets in text format. Each data set represents one set of subjects of the study, with the following description:

the number of students
the description of each student, in the following format
student_identifier:(number_of_romantic_relations) student_identifier1 student_identifier2 student_identifier3 ...
or
student_identifier:(0)

The student_identifier is an integer number between 0 and n-1, for n subjects.
For each given data set, the program should write to standard output a line containing the result.

Sample Input

7

0: (3) 4 5 6

1: (2) 4 6

2: (0)

3: (0)

4: (2) 0 1

5: (1) 0

6: (2) 0 1

3

0: (2) 1 2

1: (1) 0

2: (1) 0

Sample Output

5

2

二分图求最大独立集:

最大独立集==节点数-最大匹配数

#include<stdio.h>
#include<string.h>
#define MAX 1100
int vis[MAX],map[MAX][MAX],stu[MAX];
int t;
int find(int x)
{
	int i;
	for(i=0;i<t;i++)
	{
		if(map[x][i]&&vis[i]==0)
		{
			vis[i]=1;
			if(stu[i]==0||find(stu[i]))
			{
				stu[i]=x;
				return 1;
			}
		}
	}
	return 0;
}
int main()
{
	int n,m,i,j,sum,a,b;
	while(scanf("%d",&t)!=EOF)
	{
	    memset(stu,0,sizeof(stu));
		memset(map,0,sizeof(map));
		for(i=0;i<t;i++)
		{
			scanf("%d: (%d)",&a,&n);
			while(n--)
			{
				scanf("%d",&b);
				map[a][b]=1;
			}
		}
		sum=0;
		for(i=0;i<t;i++)
		{
			memset(vis,0,sizeof(vis));
			if(find(i))
			sum++;
		}
		printf("%d\n",t-sum/2);
	}
	return 0;
}
时间: 2024-08-04 19:58:56

hdoj 1068 Girls and Boys【匈牙利算法+最大独立集】的相关文章

POJ 1466 Girls and Boys (匈牙利算法 最大独立集)

Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10912   Accepted: 4887 Description In the second year of the university somebody started a study on the romantic relations between the students. The relation "romantically in

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

Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7044    Accepted Submission(s): 3178 Problem Description the second year of the university somebody started a study on the roman

HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)

HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <math.h> #define init(a) memset(a,

poj 1466 HDU 1068 Girls and Boys (最大独立集)

Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 11141   Accepted: 4983 Description In the second year of the university somebody started a study on the romantic relations between the students. The relation "romantically in

poj 1466 Girls and Boys(二分图的最大独立集)

http://poj.org/problem?id=1466 Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 11085   Accepted: 4956 Description In the second year of the university somebody started a study on the romantic relations between the students

HDU——1068 Girls and Boys

Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12246    Accepted Submission(s): 5768 Problem Description the second year of the university somebody started a study on the roma

Girls and Boys HDU - 1068 二分图匹配(匈牙利)+最大独立集证明

最大独立集证明参考:https://blog.csdn.net/qq_34564984/article/details/52778763 最大独立集证明: 上图,我们用两个红色的点覆盖了所有边.我们证明的前提条件是已经达到最小覆盖. 即条件1.已经覆盖所有边,条件2.所用的点数最小 首先我们来证明蓝色点组成的是一个独立集:如果有两个蓝色点间有边相连,那么这条 边则没有被覆盖,则与条件1矛盾.因此是独立集. 再来证明这个独立集最大: 如果我们要再增加这个独立集中的点,则需要把某个红点变 成蓝点.而

HDU 1068 Girls and Boys(二分匹配--匈牙利算法)

Problem Description the second year of the university somebody started a study on the romantic relations between the students. The relation "romantically involved" is defined between one girl and one boy. For the study reasons it is necessary to

hdu - 1068 Girls and Boys (二分图最大独立集+拆点)

http://acm.hdu.edu.cn/showproblem.php?pid=1068 因为没有指定性别,所以要拆点,把i拆分i和i’ 那么U=V-M (M是最大匹配,U最大独立集,V是顶点数) 2U=2V-2M  所以 U=n-M'/2. (没怎么看明白)  但是不这样会wa. 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <vector> 5 #inc