`

【二分图+最大匹配+解题思路】北大 poj 2239 Selecting Courses

阅读更多

 

/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
	Copyright (c) 2011 panyanyany All rights reserved.

	URL   : http://poj.org/problem?id=2239
	Name  : 2239 Selecting Courses

	Date  : Monday, November 28, 2011
	Time Stage : one hour

	Result: 
9607451	panyanyany
2239
Accepted	256K	32MS	C++
1360B	2011-11-28 20:46:55

Test Data :

Review :
前言:
	貌似是比较裸的二分图之最大匹配,也许是因为最近做的题相对多一点吧,所以比较容易
看出来。

思路:
	把所有的课程(course)归类为一个点集,所有的课时(class)归类为另一个点集,
课程编号为:1,2,3,...,300 ;
课时编号为:1,2,3,...,84 (因为一星期共有 7*12 节课);

每个课程有n个课时,即课程与课时之间有n条连线(或边)
怎样才能上最多的课,即求课程与课时之间的最大匹配
//----------------------------------------------------------------------------*/

#include <stdio.h>
#include <string.h>
#include <vector>

using namespace std ;

#define MAXCOURSE		301
#define MAXCLASS		85

int		n, t, p, q ;
int		link[MAXCOURSE] ;
bool	cover[MAXCLASS] ;

vector<int>	graph[MAXCOURSE] ;

bool find (int cur)
{
	int i, j ;
	for (i = 0 ; i < graph[cur].size () ; ++i)
	{
		j = graph[cur][i] ;
		if (cover[j] == false)
		{
			cover[j] = true ;
			if (link[j] == 0 || find (link[j]))
			{
				link[j] = cur ;
				return true ;
			}
		}
	}
	return false ;
}

int main ()
{
	int i, j ;
	int x, y ;
	int sum ;

	while (~scanf ("%d", &n))
	{
		for (i = 1 ; i <= n ; ++i)
		{
			graph[i].clear () ;
			scanf ("%d", &t) ;
			for (j = 1 ; j <= t ; ++j)
			{
				scanf ("%d%d", &x, &y) ;
				graph[i].push_back ((x-1)*12 + y) ;
			}
		}

		sum = 0 ;
		memset (link, 0, sizeof (link)) ;

		for (i = 1 ; i <= n ; ++i)
		{
			memset (cover, 0, sizeof (cover)) ;
			sum += find (i) ;
		}
		printf ("%d\n", sum) ;
	}
	return 0 ;
}
 
0
1
分享到:
评论

相关推荐

    二分图匹配题解1

    3. POJ2239: Li Ming的选课问题仍然是二分图最大匹配的应用。课程和时间点构成二分图的两部分,如果一门课程在某个时间点上课,就连接这两个节点。目的是计算每周Li Ming最多能上多少门不同的课程。 4. POJ2536: 地...

    ACM讲课之二分图匹配匈牙利算法学习教案.pptx

    ### ACM讲课之二分图匹配匈牙利算法学习教案知识点详解 #### 一、二分图的基本概念 二分图是一种特殊的图结构,在离散数学领域有着广泛的应用。所谓二分图,指的是能够将图的所有顶点划分为两个互不相交的集合V1和...

    北大poj解题报告

    北京大学在线编程平台POJ(PKU Online Judge)是许多学习算法和进行编程训练的学生们的重要实践场所。这个“北大poj解题报告”包含了作者在使用POJ平台解题过程中的学习总结和经验分享,旨在帮助软件工程专业的学生...

    北大POJ 大量解题代码

    【标题】"北大POJ大量解题代码"指的是北京大学在线编程平台POJ上的一系列算法题目解决方案的集合。这些代码通常由ACM(国际大学生程序设计竞赛)参赛者或爱好者编写,旨在帮助学习者理解并解决各类算法问题,提高...

    北大POJ初级-所有题目AC代码+解题报告

    【标题】"北大POJ初级-所有题目AC代码+解题报告" 涉及的知识点主要集中在编程、算法和在线判题系统方面。北京大学(Peking University, 简称PKU)的POJ(Peking University Online Judge)是一个为计算机科学爱好者...

    北大POJ初级题-数据结构:解题报告+AC代码

    北京大学在线判题系统POJ(Problem Online Judge)是许多编程爱好者和学习者锻炼算法技能的平台,特别是对于初学者,它提供了很多基础题目来帮助理解并应用数据结构。本资源包含的是北大POJ初级题目的解题报告以及...

    北大POJ部分题目答案(一些基础题目)

    很多的POJ题目答案!1000~1008,1011~1014,1016,1017,1019,1028,1032,1045,1046,1047,1050,1061,1067,1068,1088,1102,1159,1163,1183,1207,1218,1226,1247,1256,1258,1298,1316,1323,...

    POJ中级图算法所有题目【解题报告+AC代码】

    5. **二分图匹配**:匈牙利算法或Kuhn-Munkres算法用于求解二分图的最大匹配问题,广泛应用于配对问题。 6. **网络流**:包括Ford-Fulkerson算法和Edmonds-Karp算法,它们用于寻找网络中最大流量,可以解决很多实际...

    POJ算法题目分类

    * 二分图的最大匹配:二分图的最大匹配是指计算二分图的最大匹配的算法,如 poj3041、poj3020。 * 最大流的增广路算法:最大流的增广路算法是指计算图的最大流的算法,如 poj1459、poj3436。 三、数据结构 数据...

    北大POJ经典结题报告

    《北大POJ经典结题报告》是一份针对北京大学在线编程平台POJ的解题报告,旨在帮助学习者掌握算法和编程技巧,提升解决问题的能力。POJ(Problem Online Judge)是北大的一个在线编程竞赛系统,提供了丰富的算法题目...

    acm竞赛----北大poj详细解题报告

    【ACM竞赛与北大POJ解题报告】 在编程竞赛领域,ACM(国际大学生程序设计竞赛,简称ACM/ICPC)是一项极具影响力的比赛,它挑战参赛者的算法设计、问题理解和快速编码能力。北京大学(Peking University)的在线判题...

    北京大学_POJ_ACM解题报告

    北京大学的POJ_ACM解题报告是一份宝贵的资源,它为ACM(国际大学生程序设计竞赛)新手提供了丰富的学习材料。POJ(Problem Online Judge)是北京大学开发的一个在线编程题库,它为参赛者提供了大量的算法题目进行...

    北大acm题解(poj题目分析)

    《北大ACM题解》是一本专为解决POJ(Programming Online Judge)平台上的编程竞赛题目而编写的指导书籍。ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)是一项全球性的比赛,旨在...

    poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告

    poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...

    北京大学poj题目解题代码

    北京大学的POJ题目解题代码集合是一份宝贵的资源,它涵盖了ACM(国际大学生程序设计竞赛)中的许多问题,旨在帮助学生和编程爱好者提升算法理解与编程技能。POJ(Problem Set for Online Judges)是中国最早的在线...

    北大POJ初级-简单搜索

    【北大POJ初级-简单搜索】是北京大学在线判题系统POJ(Problem Online Judge)针对初学者设置的一类编程题目,主要涉及基础的算法和数据结构应用。这类问题通常不会过于复杂,旨在帮助学习者掌握基本的编程思维和...

    北京大学poj题目类型分类

    北京大学POJ题目类型分类 北京大学POJ题目类型分类是根据题目的难易程度、知识领域和解决方法对POJ题目进行分类的。通过对POJ题目的分类,可以帮助学习者更好地理解和掌握算法和数据结构的知识。 简单题 简单题是...

    poj1691解题报告

    ### poj1691解题报告 #### 题目信息 - **题目名称**:Painting A Board - **时间限制**:1S - **内存限制**:1000K - **提交总数**:62 - **通过总数**:35 - **来源**:...

    ACM常用算法及其相应的练习题.docx

    * 二分图的最大匹配:匈牙利算法 + poj3041, poj3020 * 最大流的增广路算法:KM算法 + poj1459, poj3436 三、数据结构 * 串:poj1035, poj3080, poj1936 * 排序:快排、归并排、堆排 + poj2388, poj2299 * 简单...

Global site tag (gtag.js) - Google Analytics