POJ 2239--Selecting Courses【二分图 && 最大匹配数 && 水题】

Selecting Courses

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 9363   Accepted: 4164

Description

It is well known that it is not easy to select courses in the college, for there is usually conflict among the time of the courses. Li Ming is a student who loves study every much, and at the beginning of each term, he always wants to select courses as more
as possible. Of course there should be no conflict among the courses he selects.

There are 12 classes every day, and 7 days every week. There are hundreds of courses in the college, and teaching a course needs one class each week. To give students more convenience, though teaching a course needs only one class, a course will be taught several
times in a week. For example, a course may be taught both at the 7-th class on Tuesday and 12-th class on Wednesday, you should assume that there is no difference between the two classes, and that students can select any class to go. At the different weeks,
a student can even go to different class as his wish. Because there are so many courses in the college, selecting courses is not an easy job for Li Ming. As his good friends, can you help him?

Input

The input contains several cases. For each case, the first line contains an integer n (1 <= n <= 300), the number of courses in Li Ming‘s college. The following n lines represent n different courses. In each line, the first number is an integer t (1 <= t <=
7*12), the different time when students can go to study the course. Then come t pairs of integers p (1 <= p <= 7) and q (1 <= q <= 12), which mean that the course will be taught at the q-th class on the p-th day of a week.

Output

For each test case, output one integer, which is the maximum number of courses Li Ming can select.

Sample Input

5
1 1 1
2 1 1 2 2
1 2 2
2 3 2 3 3
1 3 3

Sample Output

4

题意:

在大学里有许许多多的课程,现在小明需要去选择课程,他是一个爱学习的人,所以想尽可能多的选择课程,在学校里有n个课程,并且在学校规定,每周里的每天有12节课,那么一周就有7*12节课。输入第一行为n,代表有n个课程接下来n行,每行第一个数字x代表这个课程在这一周里面需要上x次。然后跟着x对数字,第一个D代表这周的哪一天,第二个C代表这天的哪一节课如果几个课程都在那d天的那c节课上课,那么你需要选择其中的一个,而不能选择多个课程现在要求算出小明最多可以选择多少个课程。

解析:我们把这一周的12 * 7节课编上号,每门课程和对应的节数建边,匈牙利算法求最大匹配数即可,水题一个。

#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 330
using namespace std;
int n, m;

int map[maxn][maxn];
int used[maxn];
int link[maxn];

void init(){
    memset(map, 0, sizeof(map));
}

void getmap(){
    for(int i = 1; i <= n; ++i){
        int k;
        scanf("%d", &k);
        while(k--){
            int a, b;
            scanf("%d%d", &a, &b);
            map[i][(a - 1) * 12 + b] = 1;
        }
    }
}

bool dfs(int x){
    for(int i = 1; i <= 7 * 12; ++i){
        if(map[x][i] && !used[i]){
            used[i] = 1;
            if(link[i] == -1 || dfs(link[i])){
                link[i] = x;
                return true;
            }
        }
    }
    return false;
}

int hungary(){
    int ans = 0;
    memset(link, -1, sizeof(link));
    for(int i = 1; i <= n; ++i){
        memset(used, 0, sizeof(used));
        if(dfs(i))
            ans++;
    }
    return ans;
}

int main (){
    while(scanf("%d", &n) != EOF){
        init();
        getmap();
        int sum = hungary();
        printf("%d\n", sum);
    }
    return 0;
}

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

时间: 2024-10-10 17:53:59

POJ 2239--Selecting Courses【二分图 && 最大匹配数 && 水题】的相关文章

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

题目地址:http://poj.org/problem?id=2239 Li Ming大学选课,每天12节课,每周7天,每种同样的课可能有多节分布在不同天的不同节.问Li Ming最多可以选多少节课.把n种课划分为X集合,把一周的84节课划分为Y集合, 从Xi向Yi连边,那么就转化成了求二分图的最大匹配数,然后匈牙利算法就可以了. 1 #include<cstdio> 2 #include<iostream> 3 #include<string.h> 4 #includ

POJ 2239 Selecting Courses【最大匹配】

大意: 有一些课程,每个课程的上课时间在每周可能会有多节,你可以从中任选一个时间去听课, 每周七天一天12节课  告诉你每节课的上课时间问在不冲突的情况下最多上几节课? 分析: 左集合课程 右集合时间 边为该节课对应的上课时间 求最大匹配就行了 代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 using namespace std

POJ 1274--The Perfect Stall【二分图 &amp;&amp; 最大匹配数 &amp;&amp; 水题】

The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20795   Accepted: 9386 Description Farmer John completed his new barn just last week, complete with all the latest milking technology. Unfortunately, due to engineering pr

poj2239 Selecting Courses --- 二分图最大匹配

匈牙利算法模板题 有n门课程,每门课程可能有不同一时候间,不同一时候间的课程等价. 问不冲突的情况下最多能选多少门课. 建立二分图,一边顶点表示不同课程,还有一边表示课程的时间(hash一下). #include <iostream> #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> #include

poj——2239 Selecting Courses

poj——2239   Selecting Courses Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10656   Accepted: 4814 Description It is well known that it is not easy to select courses in the college, for there is usually conflict among the time of the c

POJ 2239 Selecting Courses(二分匹配)

题目链接:http://poj.org/problem?id=2239 Description It is well known that it is not easy to select courses in the college, for there is usually conflict among the time of the courses. Li Ming is a student who loves study every much, and at the beginning

Poj 2239 Selecting Courses 【二分匹配】

Selecting Courses Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9007 Accepted: 4010 Description It is well known that it is not easy to select courses in the college, for there is usually conflict among the time of the courses. Li Ming i

POJ 2239 Selecting Course 二分图匹配(水)

http://poj.org/problem?id=2239 题意:总共7天,每天有12个教室使用,每门课有(t,pi,qi) 表示该门课每周开t次在第qi天,第pi间教室i=1..t 总共n门课 n<=300,问最多能选多少种不同的课程? 左边点为课程 右边点为(p,q) 把(p,q)看成排列中的序数 化成整数(p-1)*12+q.求二分图的最大匹配即可 复杂度为O(nm) #include <iostream> #include <cstring> #include &l

poj 2239 Selecting Courses(二分匹配简单模板)

http://poj.org/problem?id=2239 这里要处理的是构图问题p (1 <= p <= 7), q (1 <= q <= 12)分别表示第i门课在一周的第p天的第q节课上 其中二分图的X集合里表示课程i,那么我们要解决的就是Y集合了 将第i门课在一周的第p天的第q节课上进行编号,这样Y集合就是 上课时间的编号了 #include<stdio.h> #include<string.h> #include<math.h> #in