zoukankan      html  css  js  c++  java
  • hdu1150-Machine Schedule(最小点覆盖)

    二分图的最小顶点覆盖:用最少的点,让每条边都至少和其中一个点关联。
         最大匹配数 = 最小点覆盖数(Konig 定理)

    水题……

    突然发现我以前的匈牙利算法模版有问题……因为这里左边的点时1~n,右边的点是1~m,所以有不同的点标号是相同的,注意注意!

    因为这个算法本身是O(n^2)的,所以数据必然不会很大,放心用邻接矩阵存吧……

    如果某个边有0,那么不需要加进来,每个产品应该只会出现一次,不然就不对了吧……我想了好久,因为题目并没有说每个产品只出现一次……

    //hdu1150
    #include <cstdio>  
    #include <cstring>  
    #include <iostream>  
    using namespace std;
    const int N = 105;
    int n, m, k;
    bool mp[N][N];
    
    int match[N];
    bool used[N];
    
    bool find(int u) {
        for (int v = 0; v < m; ++v) {
            if (mp[u][v] && !used[v]) {
                used[v] = true;
                if (match[v] == -1 || find(match[v])) {
                    match[v] = u;
                    return true;
                }
            }
        }
        return false;
    }
    
    int hungary() {
        memset(match, -1, sizeof match);
        int ans = 0;
        for (int i = 0; i < n; ++i) {
            memset(used, false, sizeof used);
            if (find(i)) ++ans;
        }
        return ans;
    }
    
    int main() {
        //freopen("in", "r", stdin);
        while (~scanf("%d", &n) && n) {
            scanf("%d%d", &m, &k);
            int u, v;
            memset(mp, false, sizeof mp);
            while (k--) {
                scanf("%*d%d%d", &u, &v);
                if (!u || !v) continue;
                mp[u][v] = true;
            }
            printf("%d
    ", hungary());
        }
        return 0;
    }

      

  • 相关阅读:
    java数据库连接池
    TCP长连接服务的Java实现
    一种简单JDBC数据库连接池的实现
    ProFtpd快速指南
    vsftpd安装
    IIS启动失败【发生意外错误 0x8ffe2740】解决办法
    eclipse+myeclipse+tomcat配置web开发
    数据库连接池技术浅析
    论JSP数据库连接池的必要性
    ProFTPD使用
  • 原文地址:https://www.cnblogs.com/wenruo/p/5799177.html
Copyright © 2011-2022 走看看