`
阿尔萨斯
  • 浏览: 4275368 次
社区版块
存档分类
最新评论

POJ 2239 Selecting Courses(二分图最大匹配)

 
阅读更多

POJ 2239 Selecting Courses(二分图最大匹配)

http://poj.org/problem?id=2239

题意:

在大学里有许许多多的课程,现在小明需要去选择课程,他是一个爱学习的人,所以想尽可能多的选择课程,

在学校里有n个课程,并且在学校规定,每周里的每天有12节课,那么一周就有7*12节课。

如果几个课程都在那d天的那c节课上课,那么你需要选择其中的一个,而不能选择多个课程

现在要求算出小明最多可以选择多少个课程上.

分析:

二分图的最大匹配问题.把n个课程看成左边的点集,把7*12共84节能上课的时间点看成是右边的点集. 现在的问题是要选出最多的点对,使得左边的点与右边的点匹配.

AC代码:

#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=300+10;

struct Max_Match
{
    int n,m;
    vector<int> g[maxn];
    bool vis[maxn];
    int left[maxn];

    void init(int n)
    {
        this->n=n;
        this->m=7*12;
        for(int i=1;i<=n;i++) g[i].clear();
        memset(left,-1,sizeof(left));
    }

    bool match(int u)
    {
        for(int i=0;i<g[u].size();i++)
        {
            int v=g[u][i];
            if(!vis[v])
            {
                vis[v]=true;
                if(left[v]==-1 || match(left[v]))
                {
                    left[v]=u;
                    return true;
                }
            }
        }
        return false;
    }

    int solve()
    {
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            memset(vis,0,sizeof(vis));
            if(match(i)) ans++;
        }
        return ans;
    }
}MM;

int main()
{
    int n;
    while(scanf("%d",&n)==1)
    {
        MM.init(n);
        for(int i=1;i<=n;i++)
        {
            int num;
            scanf("%d",&num);
            while(num--)
            {
                int p,q;
                scanf("%d%d",&p,&q);
                MM.g[i].push_back( (p-1)*12+q );
            }
        }
        printf("%d\n",MM.solve());
    }
    return 0;
}


分享到:
评论

相关推荐

    二分图匹配题解1

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

    POJ算法题目分类

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

    poj openjudge 1111最大正向匹配

    poj openjudge 1111题最大正向匹配 提交ac

    poj题目分类

    * 二分图的最大匹配:例如 poj3041、poj3020。 * 最大流的增广路算法:例如 poj1459、poj3436。 3. 数据结构: * 串:例如 poj1035、poj3080、poj1936。 * 排序:例如 poj2388、poj2299。 * 简单并查集的应用...

    POJ题目简单分类(ACM)

    - **二分图最大匹配**:匈牙利算法,如poj3041和poj3020,解决分配问题。 - **最大流的增广路算法**:KM算法,如poj1459和poj3436,用于寻找网络中能传输的最大流量。 3. **数据结构**: - **字符串处理**:如...

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

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

    北大oj 题目分类

    初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) ... (5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020) (6)最大流的增广路算法(KM算法). (poj1459,poj3436) ......

    POJ3308-Paratroopers 【Dinic算法求最大流】

    【二分图顶点覆盖-&gt;最小割-&gt;最大流-&gt;Dinic算法求解】 解题报告+AC代码 http://hi.csdn.net/!s/WKVPR0 ----&gt; 我的所有POJ解题报告 http://blog.csdn.net/lyy289065406/article/details/6642573

    POJ1321-Chess Problem

    1. **二分图匹配**:如果棋盘上的每个位置可以看作图的一个节点,而不同位置之间的关系(如攻击、防守等)构成边,那么问题可能转化为寻找最大匹配,以确定最多可以放置多少棋子而不相互冲突。 2. **深度优先搜索...

    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常用算法及其相应的练习题.docx

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

    acm poj300题分层训练

    2. **图算法**:包括图的深度优先遍历、广度优先遍历、最短路径算法、最小生成树算法、拓扑排序、二分图的最大匹配以及最大流的增广路算法。如poj3278、poj2049、poj3083是图遍历的例子,poj1860、poj3259等则是最短...

    ACM常用算法及其相应的练习题 (2).pdf

    * 二分图的最大匹配:二分图的最大匹配是指在二分图中寻找最大匹配的算法。例题:poj3041、poj3020。 * 最大流的增广路算法:最大流的增广路算法是指在流量网络中寻找最大流的算法。例题:poj1459、poj3436。 三、...

    POJ2516__最小费用最大流

    poj2516代码最小费用最大流

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

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

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

    本部分涵盖了图算法,包括图的深度优先遍历和广度优先遍历、最短路径算法、最小生成树算法、拓扑排序、二分图的最大匹配和最大流的增广路算法。 (1) 图的深度优先遍历和广度优先遍历: (2) 最短路径算法:dijkstra,...

    北大POJ初级-图算法

    【北大POJ初级-图算法】是一系列针对北京大学在线编程平台POJ(Problem Online Judge)上的初级编程题目,重点在于图论算法的应用。这个解题报告集合了多种图算法的实现,帮助学习者掌握如何在实际问题中运用这些...

    acm 分类 北大

    - 二分图的最大匹配:匈牙利算法,如POJ3041。 - 最大流:KM算法,如POJ1459。 3. **数据结构** - 串:处理字符串问题,如POJ1035。 - 排序:快速排序、归并排序和堆排序,如POJ2299。 - 并查集:处理不相交...

    POJ1159-Palindrome

    【标题】"POJ1159-Palindrome" 是北京大学在线编程平台POJ上的一道编程题目。这道题目主要考察的是字符串处理和回文判断的知识点。 【描述】"北大POJ1159-Palindrome 解题报告+AC代码" 暗示了解决这道问题的方法和...

Global site tag (gtag.js) - Google Analytics