HDU-1498-50years,50colors(最大匹配, 枚举)

HDU-1498-50years,50colors(最大匹配, 枚举)

链接:https://vjudge.net/problem/HDU-1498#author=634579757

题意:

撞气球游戏,一个n*n的矩阵中,有不同颜色的气球,气球的颜色最多50种(从1到50)。 
游戏开始前,先选择一种颜色。游戏开始后,每次选择一行或者一列包含该种颜色的气球进行撞击。如果选择行,那么这一行的气球都会炸裂。如果选择列,这一列的气球都炸裂。 
请你求出,有多少种颜色的气球,无论怎么玩,都不能在K次之内,把所有同色的气球都撞裂。

思路:

二分图匹配, 用set记录所有存在的颜色,然后根据x,y求最大匹配,条件是Map[i][j] == color。

最大匹配大于k即可。

代码:

#include <iostream>
#include <memory.h>
#include <string>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
#include <queue>
#include <math.h>
#include <cstdio>
#include <set>
#include <iterator>
#include <cstring>
using namespace std;

typedef long long LL;
const int MAXN = 2000+10;
vector<int> G[MAXN];
int Map[200][200];
int Link[MAXN], Vis[MAXN];
int n, m, k;
int mid;

void Init()
{
    for (int i = 1;i <= n;i++)
        G[i].clear();
}

bool Dfs(int x)
{
    for (int i = 1;i <= n;i++)
    {
        if (Map[x][i] == mid && Vis[i] == 0)
        {
            Vis[i] = 1;
            if (Link[i] == -1 || Dfs(Link[i]))
            {
                Link[i] = x;
                return true;
            }
        }
    }
    return false;
}

int Solve()
{
    memset(Link, -1, sizeof(Link));
    int cnt = 0;
    for (int i = 1;i <= n;i++)
    {
        memset(Vis, 0, sizeof(Vis));
        if (Dfs(i))
            cnt++;
    }
    return cnt;
}

int main()
{
    while (~scanf("%d%d", &n, &m) && n)
    {
        set<int> node;
        memset(Map, 0, sizeof(Map));
        for (int i = 1;i <= n;i++)
        {
            for (int j = 1;j <= n;j++)
            {
                cin >> Map[i][j];
                node.insert(Map[i][j]);
            }
        }
        vector<int> Out;
        for (set<int>::iterator it = node.begin();it != node.end();it++)
        {
            mid = *it;
            int tmp = Solve();
            if (tmp > m)
                Out.push_back(mid);
        }
        if (!Out.size())
            cout << -1 << endl;
        else
        {
            cout << Out[0];
            for (int i = 1;i < Out.size();i++)
                cout << ' ' << Out[i];
            cout << endl;
        }
    }

    return 0;
}

  

转载于:https://www.cnblogs.com/YDDDD/p/10870344.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100920.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SchedulerFactoryBean的问题「建议收藏」

    SchedulerFactoryBean的问题「建议收藏」http://blog.csdn.net/beliefer/article/details/51578546转载于:https://www.cnblogs.com/yangwei20160911/p/6867182.html

    2022年5月10日
    41
  • 大数据概述「建议收藏」

    大数据概述「建议收藏」目录前言1.1大数据概念及价值1.1.1大数据的特征(特点)(1)规模性(Volume)(2)多样性(Variety)(3)高速性(Velocity)(4)价值性(Value)1.2大数据数据源1.3大数据技术应用场景1.4大数据处理流程及技术收集数据数据预处理与存储数据处理与分析数据可视化与应用环节1.5大数据与云计算的关系1.6大数据与人工智能的关系前言现在的社会是一个科技与信息高速发展的社会,人们之间的交流越来..

    2022年5月6日
    63
  • CAN总线学习笔记(3)- CAN协议错误帧

    CAN总线学习笔记(3)- CAN协议错误帧依照瑞萨公司的《CAN入门书》的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成笔记。好记性不如烂笔头,加油!1错误帧的帧结构在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了。错误帧由错误标志和错误界定符两个部分组成。主动错误标志:6个连续的显性位;被动错误标志:6个连续的隐性位;…

    2022年6月28日
    46
  • 异步编程中的BeginInvoke和EndInvoke

    异步编程中的BeginInvoke和EndInvoke如果委托对象的调用列表中只有一个方法 引用方法 就可以异步执行这个方法 通过调用委托类特有的两个方法 BeginInvoke 和 EndInvoke 去执行 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp BeginInvoke 和 EndInvoke nbsp 的三种模式 nbsp BeginInvoke 方法的参数列表 nbsp 1 引用方法所需要的参数 nbsp nbsp 2 两个额外的参数 callback 参数和 state 参数 nbsp

    2025年11月12日
    1
  • 比特币挖矿培训来到印度30个城市[通俗易懂]

    比特币挖矿培训来到印度30个城市[通俗易懂]点击上方“蓝色字”可关注我们!暴走时评:为了促进印度达利特阶层的商业企业发展,2005年印度成立了行业协会DICCI。Mahabfic则是在马哈拉施特拉邦宣传区块链、金融科技、ICO和加密货币投资的平台。最近两个机构合作在印度30个城市展开比特币挖矿培训,包括区块链技术、挖矿、创业、初创企业等课程内容。旨在为这些地区年轻人自主就业提供帮助,为这些地区创造新的经济增长点。作者:KevinHelms

    2022年5月28日
    44
  • eXtremeDB微秒级实时数据库简介「建议收藏」

    eXtremeDB微秒级实时数据库简介「建议收藏」eXtremeDB微秒级实时数据库简介 eXtremeDB实时数据库是美国McObject公司于上世纪九十年代末推出的全世界第一款全内存式实时数据库,特别为高性能、低开销、稳定可靠的极速实时数据管理而设计。 eXtremeDB的性能可以达到微秒一级的惊人速度。eXtremeDB能够达到这样惊人的极限速度,是由其对市场的独特理解、长期的行业经验、持续不断的创新精神和革命性的体系结构等…

    2022年8月31日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号