zoukankan      html  css  js  c++  java
  • POJ 2239 Selecting Courses【最大匹配】

    大意:

    有一些课程,每个课程的上课时间在每周可能会有多节,你可以从中任选一个时间去听课,

    每周七天一天12节课  告诉你每节课的上课时间问在不冲突的情况下最多上几节课?

    分析:

    左集合课程

    右集合时间

    边为该节课对应的上课时间

    求最大匹配就行了

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <vector>
     5 using namespace std;
     6 
     7 const int maxn = 305;
     8 const int maxm = 12 * 7 + 10;
     9 
    10 int mat[maxn][maxm];
    11 
    12 const int m = 12 * 7; int n; 
    13 
    14 int vis[maxm];
    15 int Link[maxm];
    16 bool Find(int u) {
    17     for(int i = 1; i <= m; i++) {
    18         if( mat[u][i] && !vis[i]) {
    19             vis[i] = 1;
    20             if(Link[i] == -1 || Find(Link[i])) {
    21                 Link[i] = u;
    22                 return true;
    23             }
    24         }
    25     }
    26     return false;
    27 }
    28 
    29 int solve() {
    30     memset(Link, -1, sizeof(Link));
    31     int cnt = 0;
    32     for(int i = 1; i <= n; i++) {
    33         memset(vis, 0, sizeof(vis));
    34         if(Find(i)) cnt++;
    35     }
    36     return cnt;
    37 }
    38 
    39 int main() {
    40     int t, a, b;
    41     while(EOF != scanf("%d",&n) ) {
    42         memset(mat, 0, sizeof(mat));
    43         for(int i = 1; i <= n; i++) {
    44             scanf("%d",&t);
    45             for(int j = 0; j < t; j++) {
    46                 scanf("%d %d",&a, &b);
    47                 mat[i][(a - 1) * 12 + b] = 1;
    48             }
    49         }
    50         printf("%d
    ",solve());
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    CentOS 7 安装java 环境
    CentOS 7 替换网易yum 源
    九度:题目1553:时钟
    Maximum Subarray
    职场细节
    poj2524 Ubiquitous Religions
    九度 1526:朋友圈
    程序载入
    设备管理
    操作系统系列
  • 原文地址:https://www.cnblogs.com/zhanzhao/p/3920324.html
Copyright © 2011-2022 走看看