zoukankan      html  css  js  c++  java
  • poj 2239 Selecting Courses

    继续复习

    二分图

    题意:比较裸的二分图,输入n,表示n个不同的课程,下面n行,每行首先是m,表示后面跟着m对信息,每对信息为(p,q),表示在星期p的第q节上这节课,(一周7天,一天12节课)。问你怎么匹配,可以让这个人一周上最多的课。

    建立二分图,X为时间,[0,83],Y为课程,[0,n-1],然后有向边Y--->X,进行匈牙利一次即可

    #include <cstdio>
    #include <cstring>
    #define N 410
    #define M 50500
    
    int n,tot;
    int match[N];
    int head[N];
    struct edge
    {
        int u,v,next;
    }e[M];
    bool vis[N];
    
    void add(int u ,int v)
    {
        e[tot].u = u; e[tot].v = v;
        e[tot].next = head[u]; head[u] = tot++;
    }
    
    int dfs(int u)
    {
        for(int k=head[u]; k!=-1; k=e[k].next)
        {
            int v = e[k].v;
            if(!vis[v])
            {
                vis[v] = true;
                if(match[v] == -1 || dfs(match[v]))
                {
                    match[v] = u;
                    return 1;
                }
            }
        }
        return 0;
    }
    
    void solve()
    {
        int res = 0;
        memset(match,-1,sizeof(match));
        for(int i=0; i<n; i++)
        {
            memset(vis,false,sizeof(vis));
            res += dfs(i);
        }
        printf("%d\n",res);
    //    for(int i=0; i<84; i++)
    //        printf("%d[%d]\n",i,match[i]);
    }
    
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            tot = 0;
            memset(head,-1,sizeof(head));
            for(int i=0; i<n; i++)
            {
                int m,p,q,time;
                scanf("%d",&m);
                while(m--)
                {
                    scanf("%d%d",&p,&q);
                    time = p*12+q-13;
                    add(i,time);
                }
            }
            solve();
        }
        return 0;
    }
  • 相关阅读:
    git环境搭建、git详细使用教程、快速上手git
    数据一致性解决方案实践
    锁的使用
    数据库连接池优化
    多级缓存优化实践
    服务端调优与JVM调优
    Sentinel 流量防卫兵
    Spring Cloud Gateway微服务网关
    OpenFeign与负载均衡
    Nacos config原理
  • 原文地址:https://www.cnblogs.com/scau20110726/p/3071928.html
Copyright © 2011-2022 走看看