zoukankan      html  css  js  c++  java
  • poj 3692 二分图最大匹配

    思路:

    如果我们将认识的建边,求最大独立集就是互相不认识的人数。那么我们反过来,将不认识的建图,求最大独立集就是互相认识的人数。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define Maxn 210
    int graphic[Maxn][Maxn],vi[Maxn],match[Maxn],n,m;
    int dfs(int u)
    {
        int i;
        for(i=1;i<=m;i++)
        {
            if(!vi[i]&&graphic[u][i])
            {
                vi[i]=1;
                if(match[i]==-1||dfs(match[i]))
                {
                    match[i]=u;
                    return 1;
                }
            }
        }
        return 0;
    }
    int main()
    {
        int i,j,k,Case=1,a,b;
        while(scanf("%d%d%d",&n,&m,&k),n||m||k)
        {
            memset(match,-1,sizeof(match));
            memset(graphic,1,sizeof(graphic));
            for(i=1;i<=k;i++)
            {
                scanf("%d%d",&a,&b);
                graphic[a][b]=0;
            }
            int ans=0;
            for(i=1;i<=n;i++)
            {
                memset(vi,0,sizeof(vi));
                if(dfs(i))
                    ans++;
            }
            printf("Case %d: %d
    ",Case++,n+m-ans);
        }
        return 0;
    }
  • 相关阅读:
    python之enumerate
    PyCharm Debug 调试
    兼容性测试方法
    mongo基本命令
    mongodb启动
    安装STF
    新家
    用数组实现的最大堆(C++)
    VS2013调用GLPK求解线性规划
    转:Java读取txt文件和写入txt文件
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3193729.html
Copyright © 2011-2022 走看看