POJ1274 The Perfect Stall【二部图最大匹配】

简介:

主题链接:

http://poj.org/problem?

id=1274


题目大意:

有N头奶牛(编号1~N)和M个牛棚(编号1~M)。

每头牛仅仅可产一次奶。每一个牛棚也仅仅同意一仅仅牛产奶。

如今给出每头奶牛喜欢去的牛棚的编号。问:最多有多少头奶牛能完毕产奶。


思路:

二分图最大匹配问题,建立一个图,用行来表示奶牛,用列来表示牛棚。将奶牛和喜欢去的牛棚编号

连边。

然后用匈牙利算法DFS版或BFS版求二分图的最大匹配数就可以。这里用了匈牙利算法DFS版。


AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;

const int MAXN = 220;

bool Map[MAXN][MAXN];
bool bMask[MAXN];

int NX,NY;
int cx[MAXN],cy[MAXN];

int FindPath(int u)
{
    for(int i = 1; i <= NY; ++i)
    {
        if(Map[u][i] && !bMask[i])
        {
            bMask[i] = 1;
            if(cy[i] == -1 || FindPath(cy[i]))
            {
                cy[i] = u;
                cx[u] = i;
                return 1;
            }
        }
    }
    return 0;
}

int MaxMatch()
{
    int res = 0;
    for(int i = 1; i <= NX; ++i)
        cx[i] = -1;
    for(int i = 1; i <= NY; ++i)
        cy[i] = -1;

    for(int i = 1; i <= NX; ++i)
    {
        if(cx[i] == -1)
        {
            for(int j = 1; j <= NY; ++j)
                bMask[j] = 0;
            res += FindPath(i);
        }
    }
    return res;
}

int main()
{
    int d,id;
    while(~scanf("%d%d",&NX,&NY))
    {
        memset(Map,0,sizeof(Map));

        for(int i = 1; i <= NX; ++i)
        {
            scanf("%d",&id);
            for(int j = 1; j <= id; ++j)
            {
                scanf("%d",&d);
                Map[i][d] = 1;
            }
        }

        printf("%d\n",MaxMatch());
    }

    return 0;
}


版权声明:本文博主原创文章,博客,未经同意不得转载。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4913353.html,如需转载请自行联系原作者


相关文章
|
JavaScript
Vue打包后页面出现空白解决办法(臻享版)
1. 命令行输入:**npm run build** 打包出来后项目中就会多了一个文件夹dist,这就是我们打包过后的项目。
1771 1
|
安全 Linux Shell
IOS安装iSH
IOS安装iSH
966 0
IOS安装iSH
|
数据可视化 uml
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
UML图讲解,关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系。
5893 0
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
|
机器学习/深度学习 算法 C++
技术笔记:UVA322ships(POJ1138)
技术笔记:UVA322ships(POJ1138)
95 1
|
SQL 存储 分布式计算
MaxCompute产品使用问题之odps sql如何定义变量
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
471 0
|
Java Maven Spring
Spring Boot中集成ZooKeeper的最佳实践
Spring Boot中集成ZooKeeper的最佳实践
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
|
C++ 容器
POJ3096—Surprising Strings
POJ3096—Surprising Strings
|
SQL 关系型数据库 MySQL
10倍性能提升!一文读懂AnalyticDB MySQL秒级漏斗分析函数
营销域中的洞察分析/智能圈人/经营报表等场景是OLAP分析型数据库的重要应用场景,云原生数据仓库AnalyticDB MySQL在淘宝、饿了么、菜鸟、优酷、盒马等业务的营销场景有比较长时间的积累和沉淀,我们将通过一系列文章来介绍AnalyticDB MySQL在营销域数据产品中的落地与应用,本文主要介绍“漏斗分析”的实现与应用。
|
机器学习/深度学习 编解码 算法
使用LSH 进行特征提取
局部敏感哈希(LSH)通常用于近似最近邻算法(ANN) 操作(向量搜索)。LSH的特性也可以在以矢量为输入的神经网络模型中得到利用(例如,各种的音频、视频和文本嵌入等内容信号)。
242 0