【二分匹配】hdu1045 Fire Net

CCF大数据竞赛-面向电信行业存量用户的智能套餐个性化匹配模型 题目:面向电信行业存量用户的智能套餐个性化匹配模型(2018 CCF-大数据竞赛(联通研究院举办) ) 网址:https://www.datafountain.cn/competitions/311/details 赛题背景: 电信产业作为国家基础产业之一,覆盖广、用户多,在支撑国家建设和发展方面尤为重要。随着互联网技术的快速发展和普及,用户消耗的流量也成井喷态势,近年来,电信运营商推出大量的电信... 阅读详情

Fire Net

http://acm.hdu.edu.cn/showproblem.php?pid=1045

Problem Description
Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. 

A blockhouse is a small castle that has four openings through which to shoot. The four openings are facing North, East, South, and West, respectively. There will be one machine gun shooting through each opening. 

Here we assume that a bullet is so powerful that it can run across any distance and destroy a blockhouse on its way. On the other hand, a wall is so strongly built that can stop the bullets. 

The goal is to place as many blockhouses in a city as possible so that no two can destroy each other. A configuration of blockhouses is legal provided that no two blockhouses are on the same horizontal row or vertical column in a map unless there is at least one wall separating them. In this problem we will consider small square cities (at most 4x4) that contain walls through which bullets cannot run through. 

The following image shows five pictures of the same board. The first picture is the empty board, the second and third pictures show legal configurations, and the fourth and fifth pictures show illegal configurations. For this board, the maximum number of blockhouses in a legal configuration is 5; the second picture shows one way to do it, but there are several other ways. 



Your task is to write a program that, given a description of a map, calculates the maximum number of blockhouses that can be placed in the city in a legal configuration. 
 

Input
The input file contains one or more map descriptions, followed by a line containing the number 0 that signals the end of the file. Each map description begins with a line containing a positive integer n that is the size of the city; n will be at most 4. The next n lines each describe one row of the map, with a '.' indicating an open space and an uppercase 'X' indicating a wall. There are no spaces in the input file. 
 

Output
For each test case, output one line containing the maximum number of blockhouses that can be placed in the city in a legal configuration.
 

Sample Input
  
4 .X.. .... XX.. .... 2 XX .X 3 .X. X.X .X. 3 ... .XX .XX 4 .... .... .... .... 0
 

Sample Output
  
5 1 5 2 4

本题可以深度优先搜索,也可以二分匹配。

把每行每列相连的空地都缩成一个点。

分别作为x部和y部,相连的条件就是有相交(即'.'的地方)。

求出最大匹配就是题目所求。


#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 8
char map[MAX][MAX];
int colx[MAX][MAX],rowx[MAX][MAX];
bool path[MAX][MAX],visit[MAX];
int match[MAX];
bool SearchPath(int s,int m)
{
    for(int i=0; i<m; ++i)
    {
        if(path[s][i]&&!visit[i])
        {
            visit[i]=true;
            if(match[i]==-1||SearchPath(match[i],m))
            {
                match[i]=s;
                return true;
            }
        }
    }
    return false;
}
int main()
{
    int n,row,col;
    for(; scanf("%d",&n),n;)
    {
        getchar();
        for(int i=0; i<n; ++i)
            gets(map[i]);
        row=col=0;
        memset(colx,-1,sizeof(colx));
        memset(rowx,-1,sizeof(rowx));
        for(int i=0; i<n; ++i)
        {
            for(int j=0; j<n; ++j)
            {
                if(map[i][j]=='.'&&rowx[i][j]==-1)
                {
                    for(int k=j; map[i][k]=='.'&&k<n; ++k)
                        rowx[i][k]=row;
                    ++row;
                }
                if(map[j][i]=='.'&&colx[j][i]==-1)
                {
                    for(int k=j; map[k][i]=='.'&&k<n; ++k)
                        colx[k][i]=col;
                    col++;
                }
            }
        }
            memset(path,false,sizeof(path));
            for(int i=0;i<n;++i)
                for(int j=0;j<n;++j)
                    if(map[i][j]=='.')
                        path[rowx[i][j]][colx[i][j]]=true;
            int summ=0;
            memset(match,-1,sizeof(match));
            for(int i=0; i<row; ++i)
            {
                memset(visit,false,sizeof(visit));
                if(SearchPath(i,col))
                    summ++;
            }
            printf("%d\n",summ);
    }
    return 0;
}


Win11系统下Abaqus2022与VS2022+oneAPI2023环境配置全攻略(附VUMAT子程序避坑指南) 本文详细指导在Windows 11系统下,为Abaqus 2022配置Visual Studio 2022与Intel oneAPI 2023的Fortran编译环境,以支持VUMAT等用户子程序开发。内容涵盖软件安装顺序、环境变量关联、快捷方式修改及关键验证步骤,并提供了首个VUMAT子程序的实战编写与模型验证方法,帮助用户高效搭建稳定可靠的仿真开发平台。 阅读详情

相关推荐

SWAT模型参数太多搞不定?一篇讲清如何用SWAT-CUP筛选关键敏感参数(含结果图解读)

本文详细解析了如何使用SWAT-CUP进行参数敏感性分析,帮助水文模型初学者从上百个参数中筛选出关键敏感参数。通过实际案例和结果图解读,介绍了敏感性分析的核心价值、SWAT-CUP结果界面解读方法以及参数筛选的四步实战法,显著提升模型调试效率。文章还提供了典型问题排查手册,解决敏感参数与文献不一致、率定后模型变差等常见问题。

weixin_30385925的博客 320

电信用户匹配模型实例

如下:   import numpy as np import pandas as pd import jieba.analyse as jieba   data = pd.read_csv(r'/opt/dianxing/train_all.csv',low_memory=False) def dataProcess(data): data.is_mix_service=data...

npcomplet的博客 945

Python爬虫实战:5分钟抓取东方财富股票数据并保存为CSV

在投资分析与量化研究的日常工作中,获取结构化、可用的金融数据往往是第一步。对于个人投资者和量化入门者而言,如何高效获取A股全市场行情,常常面临网页动态加载、反爬机制与数据整理繁琐等挑战。本文从数据采集的基础概念出发,介绍如何利用Python这一通用编程语言,通过requests库请求财经网站公开的HTTP接口,获取返回的JSON数据,再借助pandas进行字段映射、数据清洗与表格化处理。这种方式相比传统页面解析具有响应快、结构稳定、易于批量操作的显著优势,尤其适合构建个人股票数据池、验证选股策略或进行市场情

weixin_33146151的博客 251

文本匹配模型-BiMPM

在上一篇博客中介绍了ESIM模型(https://blog.csdn.net/zhang2010hao/article/details/87913910),这里介绍一个新的文本匹配模型BiMPM,其在某些任务中的效果超过ESIM模型。 论文链接:http://tongtianta.site/paper/1759 现在去判断两个句子相似性的深度学校解决方案主要有两种,其一是Simaese net...

zhang2010hao的博客 7771

树莓派4B+红外传感器:手把手教你DIY一个能走黑线的智能小车(Python代码全解析)

本文详细介绍了如何使用树莓派4B和红外传感器DIY一个智能循迹小车,包括硬件配置、GPIO连接、Python代码实现及优化算法。通过动态PWM调速、状态机设计和赛道记忆算法,提升小车的循迹性能和稳定性。适合初学者和电子爱好者动手实践。

weixin_29188043的博客 269

HC-SR04测距不准?STM32F103定时器捕获模式详解与精度提升实战

本文详细解析了HC-SR04超声波测距模块在STM32F103上的精度问题,并提供了定时器输入捕获模式的实战配置方法。通过硬件级时间测量和温度补偿算法,将测距精度提升至±0.1cm,适用于工业级应用场景。文章包含完整的代码实现和测试对比数据,帮助开发者解决超声波测距不准的常见问题。

weixin_30313409的博客 351

开源-BDCI2018面向电信行业存量用户的智能套餐个性化匹配模型Top1解决方案和代码

来源 本人经过作者同意,公布了:BDCI2018面向电信行业存量用户的智能套餐个性化匹配模型数据竞赛top1解决方案和代码。该方案利用已有的用户属性(如个人基本信息、用户画像信息等)、终端属性(如终端品牌等)、业务属性、消费习惯及偏好匹配用户最合适的套餐,对用户进行推送,完成后续个性化服务。  (最终排名1/2546)     赛题介绍   1.赛题名称 面向电信行业存量用户的...

心之所向 6382

Ubuntu24.04/20.04设置网络共享文件夹

Ubuntu20.04利用向日葵远程控制时,不能传输文件。使用linux版本QQ来传输是可以的,不过linuxqq功能真的很弱。因此,打算在Ubuntu系统中建立一个共享文件夹,可在局域网中访问。 1、新建共享文件夹 获取root权限,或者登陆root账户。可在/home文件夹(或其它文件夹)下新建一个文件夹,如share。 右击文件夹,选择“本地网络共享”菜单。按下图设置。 点击确定。如果系统已经安装了samba服务器,就可以进入第3步。如果没有,会提示安装,按提示安装,可能会出错,可进.

willhu2008的专栏 2万+

静态结构模型 动态行为模型

静态结构模型1. 从用例模型入手,识别分析类 2. 描述各个类的属性 3. 定义各个类的操作 4. 定义状态 5. 建立类之间的关系 6. 绘制类图 分析类是概念层次上的内容,用于描述系统中较高层次的对象,分析类直接与应用逻辑相关,而不关注于技术实现的问题。包括实体类,边界类,控制类。两种类图:1. 领域类图:是从面向对象的视角看待现实世界的结果,通过类图来描述现实世界中各种事物的关系,偏重对业务领

syfalex的博客 8282

因时机器人-灵巧手配置方案(Ubuntu18.04)

因时机器人-灵巧手配置方案(Ubuntu18.04)

CH_monsy的博客 3848

ESP32 物联网宠物喂食器:实现远程智能投喂的完整方案

本项目基于 ESP32 实现了智能宠物喂食器的核心功能,硬件结构简单、成本较低,软件支持远程控制和状态监测。添加摄像头:通过 ESP32-CAM 模块实时观察宠物进食情况。APP 集成:开发专属手机 APP,支持定时设置、报警推送、喂食记录查询。语音控制:结合 Alexa 或小爱同学,实现语音指令喂食。太阳能供电:户外使用时,通过太阳能板为设备供电,节能环保。

weixin_42300449的博客 1274

HDU 1045 Fire Net 二分匹配

题意:给一个n*n的矩阵,‘X’表示城墙,’.'表示空地,可以在空地上建造碉堡,两碉堡不能处于同一行或者同一列,除非中间有城墙隔着,求能够建造的碉堡的最大个数 思路:这题可以通过缩点来用二分匹配解决(强),把每行和每列中的所有连着的空地缩成一个点(显然两个碉堡不能处于连续的空地),若某行和某列上的点为空地,在各自缩成的点之间连一条边,求出所有行缩成的点和列缩成的点的最大匹配即可 #include&...

qq_42397248的博客 183

【雕爷学编程】Arduino智慧交通之RF24通信实现车队之间的实时通信和协调

通过这些示例,车队领导可以发送指令给车队成员,车队成员可以接收指令并执行相应的操作,同时车队成员也可以发送自己的位置信息给车队领导或其他成员,以实现车队之间的实时通信和协调。例如,在高速公路上,车队中的车辆可以根据前方车辆的速度和位置信息,自动调整自身的速度和距离,以保持车队的整体稳定和安全。Arduino智慧交通系统利用RF24通信模块实现车队之间的实时通信和协调,通过无线通信技术,车辆之间可以实时传输数据和指令,以实现车队的协同行驶和交通优化。通过数据处理和分析,可以生成实时的交通信息和统计数据。

雕爷学编程 1074

二分匹配 hdu 1045 Fire Net

题意:给定一个最大4*4的方形地图,里面有墙(X)和空地(.)。在每个空地上可以放大炮,但两个大炮如果在同一行或同一列并且之间没有墙阻隔的话,会互相攻击,所以不能同时存在。问最多能放多少个大炮。 刚开始看完全想不到是二分匹配,赶紧dfs肯定能做,数据范围小,不一定超时,参考了一下discuss,看到有二分匹配的,也就参考题解想了想 这题首先要缩点,把竖列y连续的空地,给一样的数字,从1

bitwater的空间 430

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

hdu 1045 Fire Net (二分匹配)

http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8000    Accepted Submission(s):

大太阳 662

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

HDU Fire Net 1045 二分匹配

题意:两个在同一行的碉堡之间必须有墙隔开,问在地图上最多能放多少碉堡。

Accepted 380

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

hdu 1045 Fire Net-二分匹配

这题也可以用搜索来做 但用匹配做更简单 //Time 0ms,Memory 332K#include #include using namespace std; char city[4][5]; int n,l1,l2,vis[10],flag[10],p[4][4],q[4][4],pq[10][10]; int f(int u) { int i; for(i=0;i<l

二十一画生的专栏 980

HDU 1045 Fire Net(二分匹配)

Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8549    Accepted Submission(s): 4936 Problem Description Suppose that we have

HHH的专栏 492

hdu 1045 Fire Net 二分匹配

题目链接: Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6890    Accepted Submission(s): 3894 Problem Description Suppos

万事屋 616

hdu 1045Fire Net (建图 、二分匹配)

Problem Description Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse i

wtml 338

HDU 1045 fire net【二分匹配或者DFS】

思路:          二分匹配难点就在于建图,怎样有效的建立好模型,决定这个题的成败 —         方法一:此题数据范围较小,可以搜索(DFS) —         —方法二:以“方格块”建图,每个横向的连续空地作为一个X集的结点,每个纵向的连续空地作为一个Y集的结点           以题目的第一个例子作说明:           如下是所建的图:

Job_yi的专栏 686

Fire Net HDU - 1045(二分匹配)

把每一列中相邻的 . 缩为一个点 作为二分图的左边 把每一行中相邻的 . 缩为一个点 作为二分图的右边 然后求最大匹配即可 这题用匈牙利足够了。。。然而。。我用了hk。。。有点大材小用的感觉/// #include <iostream> #include <cstdio> #include <cstring> #incl...

babing2770的博客 154

二分匹配-hdu-1045-Fire Net

Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a small castle that

emmmm 572

HDU - 1045 Fire Net(二分匹配)

Description Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall.A blockhouse is a...

weixin_30279751的博客 111

HDU-1045-Fire Net [二分匹配][匈牙利算法]

题目传送门题意:给一个最大4*4的地图,’.’为路’X’为墙,可以在路上安放堡垒,堡垒会攻击与炮台所在一条直线上所有堡垒,但堡垒打不破墙。问在这个地图上可以最多安放多少个堡垒。思路:裸的二分匹配模板题。难点在于如何建图,分别从横竖两个方向进行缩点建立二分图。#include <algorithm> #include <iostream> #include <cstdlib> #include <cs

裤头是叫裤头的裤头 466

HDU1045 Fire Net(二分匹配)

题意: 给出一张n*n的图,图中'X'表示墙,'.'表示空地,可以放点同一条直线上只能有一个点,除非有墙隔开,问在给出的图中 最多能放置多少个点 思路: 4*4的图。。暴搜完全就可以了,不过是二分匹配专题就学了一发 把原图按行按列缩点,一行一列相邻的区域只能放一个 然后用行点和列点进行匹配,输出最大匹配 /* ***********************************...

weixin_34216036的博客 123
上一篇: 【线段树】 hdu1754 I Hate It
下一篇: 【二分匹配】zoj1654 Place the Robots
ACM_Ted
博客等级 码龄15年 122粉丝 208原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值