zoukankan      html  css  js  c++  java
  • poj3692

    最大独立集,把不认识的男女看成是有矛盾的,要选出一些互相没有矛盾的男女。

    View Code
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    using namespace std;
    
    #define maxn 205
    
    bool g[maxn][maxn];
    int uN, vN, m;
    int xM[maxn], yM[maxn];
    bool chk[maxn];
    
    void input()
    {
        for (int i = 0; i < m; i++)
        {
            int a, b;
            scanf("%d%d", &a, &b);
            g[--a][--b] = true;
        }
        for (int i = 0; i < uN; i++)
            for (int j = 0; j < vN; j++)
                g[i][j] = !g[i][j];
    }
    
    bool SearchPath(int u)
    {
        int v;
        for (v = 0; v < vN; v++)
            if (g[u][v] && !chk[v])
            {
                chk[v] = true;
                if (yM[v] == -1 || SearchPath(yM[v]))
                {
                    yM[v] = u;
                    xM[u] = v;
                    return true;
                }
            }
        return false;
    }
    
    int MaxMatch()
    {
        int u, ret = 0;
        memset(xM, -1, sizeof(xM));
        memset(yM, -1, sizeof(yM));
        for (u = 0; u < uN; u++)
        {
            if (xM[u] == -1)
            {
                memset(chk, false, sizeof(chk));
                if (SearchPath(u))
                    ret++;
            }
        }
        return ret;
    }
    
    int main()
    {
        //freopen("t.txt", "r", stdin);
        int t = 0;
        while (scanf("%d%d%d", &uN, &vN, &m), uN | vN | m)
        {
            t++;
            memset(g, 0, sizeof(g));
            input();
            printf("Case %d: %d\n", t, uN + vN - MaxMatch());
        }
        return 0;
    }
  • 相关阅读:
    Wamp 扩展Oracle Oci
    Yii 网站上线不需手动配置
    Centos 设置时区
    Crontab 入门
    centos apache安装oracle扩展
    Centos rpm 卸载
    mac vagrant 虚拟机nfs挂载点
    搭建php虚拟环境
    Mac 安装package control
    Sublime 安装、删除插件
  • 原文地址:https://www.cnblogs.com/rainydays/p/2578868.html
Copyright © 2011-2022 走看看