关闭

hdu2444 The Accomodation of Students--二分图判断 & 最大匹配数

标签: 最大匹配二分图DFSBFSHDU
337人阅读 评论(0) 收藏 举报
分类:

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


题意:给定n个人的m对关系,判断是否可以组成二分图,不可以的话输出No;不然输出最大匹配数。


#define _CRT_SECURE_NO_DEPRECATE 

#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#define INF 99999999;
using namespace std;

int n, m;
int a[205][205];
int color[205];
int match[205];
int vis[205];

bool bfs(int s)
{
	queue<int> Q;
	Q.push(s);
	color[s] = 1;

	while (!Q.empty())
	{
		int u = Q.front();
		Q.pop();
		for (int v = 1; v <= n; v++)
		{
			if (a[u][v] && color[v] == -1)
			{
				color[v] = 1 - color[u];
				Q.push(v);
			}
			else if (a[u][v] && color[v] == color[u])
				return false;
		}
	}
	return true;
}

/* 要从1到n一个一个判断,因为可能图是不连通的,也就是起点就是一个独立点 */
bool judge()
{
	memset(color, -1, sizeof(color));
	for (int i = 1; i <= n; i++)
		if (color[i] == -1 && !bfs(i))
			return false;
	return true;
}

int dfs(int u)
{
	for (int v = 1; v <= n; v++)
	{
		if (a[u][v] && !vis[v])
		{
			vis[v] = 1;
			if (match[v] == -1 || dfs(match[v]))
			{
				match[v] = u;
				match[u] = v;
				return 1;
			}
		}
	}
	return 0;
}

int hungarian()
{
	int ans = 0;
	memset(match, -1, sizeof(match));
	for (int i = 1; i <= n; i++)
	{
		if (match[i] == -1)
		{
			memset(vis, 0, sizeof(vis));
			ans += dfs(i);
		}
	}
	return ans;
}

int main()
{
	int x, y;
	while (~scanf("%d%d", &n, &m))
	{
		memset(a, 0, sizeof(a));

		for (int i = 1; i <= m; i++)
		{
			scanf("%d%d", &x, &y);
			a[x][y] = a[y][x] = 1;
		}
	
		if (!judge())
			printf("No\n");
		else
			printf("%d\n", hungarian());
	}
	return 0;
}




1
5
查看评论

hdu2444 The Accomodation of Students (二分图判断+最大匹配)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2444 题解:先判断图是不是二分图。 问题描述:给定一个无向图G=,如何能够在O(V+E)时间内判断这个图是否是一个二分图(或者称为2着色) 分析:如果这个无向图没有回路...
  • lezong2011
  • lezong2011
  • 2013-09-07 11:21
  • 613

HDU2444 The Accomodation of Students(判断二分图+最大匹配)

The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(...
  • i1020
  • i1020
  • 2017-05-02 15:49
  • 69

HDU2444 The Accomodation of Students(染色法判断二分图)

The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(...
  • zezzezzez
  • zezzezzez
  • 2017-11-16 14:02
  • 51

hdu2444——The Accomodation of Students(判断二分图+匈牙利算法)

Problem Description There are a group of students. Some of them may know each other, while others don’t. For example, A and B know each other, B and ...
  • blue_skyrim
  • blue_skyrim
  • 2016-09-28 19:12
  • 253

hdu2444 The Accomodation of Students【二分图判断+最大匹配】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:有n个学生,这n个学生中有m对关系,问你能否把他们分成两组,每组里,他们相互都不认识,如果能输出两组中的最大人数 解析:分成两组,组里的人都互不认识,就是判断这个图能否构成二分图,然后找...
  • Richie_ll
  • Richie_ll
  • 2017-07-16 21:39
  • 149

HDU2444 The Accomodation of Students(染色法判断二分图+最大匹配)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2444
  • u013739363
  • u013739363
  • 2014-08-04 21:36
  • 220

二分图 匈牙利算法 HDU2444 The Accomodation of Students

The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submissio...
  • TheWise_lzy
  • TheWise_lzy
  • 2017-12-14 12:23
  • 63

The Accomodation of Students(二分图判断+匈牙利)

The Accomodation of Students Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &a...
  • u014665013
  • u014665013
  • 2016-05-07 22:11
  • 873

hdu2444(判断二分图)

The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(...
  • martinue
  • martinue
  • 2016-03-10 20:56
  • 229

二分图 最小覆盖数 = 最大匹配数、最大独立集 = 总数-最小覆盖集 证明 hdu 1068

二分图有两个定理:最小覆盖数=最大匹配数、最大独立集=总数-最小覆盖集 。 这里来给出证明(如果还不懂匈牙利算法,请先看之前写的一篇)匈牙利算法链接 几个基本定义: 最小覆盖:即在所有顶点中选择最少的顶点来覆盖所有的边。 最大匹配:二分图左右两个点集中,选择有边相连的两个匹配成一对(每个点只能匹配一...
  • Techmonster
  • Techmonster
  • 2015-11-24 13:19
  • 2182
    个人资料
    • 访问:446734次
    • 积分:7738
    • 等级:
    • 排名:第3273名
    • 原创:395篇
    • 转载:52篇
    • 译文:0篇
    • 评论:46条
    最新评论