zoukankan      html  css  js  c++  java
  • POJ2239简单二分匹配

    题意:
          一周有7天,每天可以上12节课,现在给你每科课的上课时间,问你一周最多可以上几科课,一科课只要上一节就行了。


    思路:
          简单题目,直接二分就行了,好久没写二分匹配了,练习下手而已。


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


    #define N_node 400
    #define N_edge 27000


    typedef struct
    {
        int to ,next;
    }STAR;


    STAR E[N_edge];
    int list[N_node] ,tot;
    int mk_dfs[N_node] ,mk_gx[N_node];


    void add(int a ,int b)
    {
        E[++tot].to = b;
        E[tot].next = list[a];
        list[a] = tot;
    }


    int DFS_XYL(int x)
    {
        for(int k = list[x] ;k ;k = E[k].next)
        {
            int to = E[k].to;
            if(mk_dfs[to]) continue;
            mk_dfs[to] = 1;
            if(mk_gx[to] == -1 || DFS_XYL(mk_gx[to]))
            {
                mk_gx[to] = x;
                return 1;
            }
        }
        return 0;
    }


    int main ()
    {
        int i ,n ,Ans ,a ,b ,nn;
        while(~scanf("%d" ,&n))
        {
            memset(list ,0 ,sizeof(list));
            tot = 1;
            for(i = 1 ;i <= n ;i ++)
            {
                scanf("%d" ,&nn);
                while(nn--)
                {
                    scanf("%d %d" ,&a ,&b);
                    add(i ,n + (a - 1) * 12 + b);
                }


            }
            Ans = 0;
            memset(mk_gx ,255 ,sizeof(mk_gx));
            for(i = 1 ;i <= n ;i ++)
            {
                memset(mk_dfs ,0 ,sizeof(mk_dfs));
                Ans += DFS_XYL(i);
            }
            printf("%d " ,Ans);
        }
        return 0;
    }







  • 相关阅读:
    设计模式之工厂模式-抽象工厂(02)
    1036 跟奥巴马一起编程 (15 分)
    1034 有理数四则运算 (20 分)
    1033 旧键盘打字 (20 分)
    1031 查验身份证 (15 分)
    大学排名定向爬虫
    1030 完美数列 (25 分)二分
    1029 旧键盘 (20 分)
    1028 人口普查 (20 分)
    1026 程序运行时间 (15 分)四舍五入
  • 原文地址:https://www.cnblogs.com/csnd/p/12062602.html
Copyright © 2011-2022 走看看