G - Oil Skimming ——二分图匹配(匈牙利算法)

基于CANopenNode协议栈在正点原子探索者开发板上进行移植 配置好之后进行采用keil IDE进行代码生成即可,还需要进行CANopenNode的代码集成,并参照demo进行代码移植。发送完成后心跳包以1s的周期重新开始发送。正点原子的开发板引出的是CAN1接口。这里的心跳时间间隔设置为100ms。则将心跳包周期设置为0。 阅读详情

G - Oil Skimming

Thanks to a certain "green" resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floating in the Gulf of Mexico just waiting to be scooped up by enterprising oil barons. One such oil baron has a special plane that can skim the surface of the water collecting oil on the water's surface. However, each scoop covers a 10m by 20m rectangle (going either east/west or north/south). It also requires that the rectangle be completely covered in oil, otherwise the product is contaminated by pure ocean water and thus unprofitable! Given a map of an oil slick, the oil baron would like you to compute the maximum number of scoops that may be extracted. The map is an NxN grid where each cell represents a 10m square of water, and each cell is marked as either being covered in oil or pure water.

Input

The input starts with an integer K (1 <= K <= 100) indicating the number of cases. Each case starts with an integer N (1 <= N <= 600) indicating the size of the square grid. Each of the following N lines contains N characters that represent the cells of a row in the grid. A character of '#' represents an oily cell, and a character of '.' represents a pure water cell.

Output

For each case, one line should be produced, formatted exactly as follows: "Case X: M" where X is the case number (starting from 1) and M is the maximum number of scoops of oil that may be extracted.

Sample Input

1
6
......
.##...
.##...
....#.
....##
......

Sample Output

Case 1: 3

思路:

       是把 ‘#’  替换成 数字,构建 关系G(本代码是 line[][]) 。

注意:

        1)二分匹配时,要记得把n换成tmp。  详细见代码

        2)记得清零;

总结:

       一个二分图中的最大匹配数等于这个图中的 最小点覆盖数——假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。

代码:

#include<map>
#include<queue>
#include<math.h>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define MM 605
const int INF=1e9;
int line[MM][MM],book[MM],man[MM],t[MM][MM];
char tu[MM][MM];
int n;
bool Find(int x)
{
    for(int i=1; i<=n; i++)
    {
        if(line[x][i] && !book[i])
        {
            book[i]=1;
            if(!man[i] || Find(man[i]))
            {
                man[i]=x;
                return true;
            }
        }
    }
    return false;
}
int match()
{
    int ans=0;
    for(int i=1; i<=n; i++)
    {
        mem(book,0);
        if(Find(i))
            ans++;
    }
    return ans/2;
}
int main()
{
    int ca,cas=1;
    scanf("%d",&ca);
    while(ca--)
    {
        mem(tu,'.');
        mem(t,0);
        mem(line,0);
        mem(man,0);
        int tmp=0;
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            scanf("%s",tu[i]+1);
            for(int j=1; j<=n; j++)
            {
                if(tu[i][j]=='#')
                    t[i][j]=++tmp;
            }
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                if(tu[i][j]=='#')
                {
                    if(tu[i-1][j]=='#')
                        line[t[i][j]][t[i-1][j]]=1;
                    if(tu[i][j-1]=='#')
                        line[t[i][j]][t[i][j-1]]=1;
                    if(tu[i+1][j]=='#')
                        line[t[i][j]][t[i+1][j]]=1;
                    if(tu[i][j+1]=='#')
                        line[t[i][j]][t[i][j+1]]=1;
                }
            }
        }
        n=tmp;
        printf("Case %d: %d\n",cas++,match());
    }
    return 0;
}

 

开关电源环路稳定性分析(01)-Buck变换器 这篇文章主要是根据Buck变换器的拓扑结构,利用欧姆定律,基尔霍夫定律,积分微分,这些我们所熟悉的理论推导出了开关电源输入和输出关系的表达式,我相信看完这篇文章,应该是可以自己推导一次。在后面的文章中,我们同样会按照这样的风格,尽量使用大家都已经掌握的知识,来一步一步的拆解晦涩难懂的环路稳定性的问题,在前面先把积木搭起来,后面综合分析的时候就不会显得那么困难! 阅读详情

相关推荐

EMC系列EtherCAT总线运动控制器(二):Motion通讯连接、总线配置及诊断

雷赛-EMC系列EtherCAT总线运动控制器(二):Motion通讯连接、总线配置及诊断

weixin_38570076的博客 1889

Oil Skimming——最大二分匹配

Description Thanks to a certain "green" resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floating in the Gulf of Mexico just waiting to be

qq_21820377的专栏 790

熵编码(五)-CABAC(一) 基础篇

前两篇算术编码文章介绍了算术编码原理和步骤。本篇文章介绍CABAC,基于上下文自适应的二进制算术编码。本文对CABAC的基本原理进行了详细的介绍和分析,下篇文章将会对H264编码中的CABAC熵编码的实际应用进行介绍。

尹佑壮的博客 3883

Oil Skimming HDU - 4185(最大匹配)

题目链接 大意:给一个nn的地图,其中".“表示海洋,”#"表示飘在海上的石油,有一个公司有12的铲子可以去除在海上的石油,问最多能用多少铲。 思路:二分匹配,把每个"#"看成一个点记录有多少的点,如果一个油的上下左右有油,则形成匹配,因为是无向图所谓最后匹配数要除2。 #include<bits/stdc++.h> #define maxn 1000 using namespace...

qq_43697256的博客 209

OPC UA 服务端的模拟工具及客户端工具

详细介绍如何使用 Prosys OPC UA Simulation Server 作为 OPC UA 服务端的模拟工具来生成数据模型,并使用 Softing OPC UA Client 作为客户端工具,直观地查看和验证模拟生成的数据。

weixin_44462773的博客 9877

线性分类器(Linear Classifier)

线性分类器 如上图所示,这是二维空间中的一个数据集,如果他正好能够被一条直线分成两类,那么我们称它为线性可分数据集,这条直线就是一个线性分类器。 在三维空间中,如果数据集线性可分,是指能够被一个平面分为两类。 在一维空间中,所有的点都在一条直线上,如果线性可分。可以理解为它们能够被一个点分开。 这里的直线、平面、点被分为决策边界。 一个 m 维空间中的数据集,如果能够被一个超平面一分为二,那么这个数据集就是线性可分的,这个超平面就是决策边界。 例如,这是二维平面上的一条直线, 它可以把平面切分成两

xuechanba的博客 1万+

Oil Skimming【最大匹配】

Thanks to a certain "green" resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floating in the Gulf of Mexico just waiting to be scooped up by e...

既然弱小,就只顾变强就是了 605

ESP32设备驱动-TM1637-驱动4位7段数码管

TM1637是一款带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成了MCU数字接口、数据锁存、LED高压驱动、键盘扫描等功能。 TM1637使用DIP20/SOP20封装,主要适用于电磁炉、微波炉、小家电的显示驱动。

视觉与物联智能 2118

Oil Skimming

Thanks to a certain "green" resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floating in the Gulf of Mexico just waiting to be scooped up by enterprising oil barons. One such oil baron has a special

qq_52898168的博客 179

24届数字IC验证——SV+UVM基础知识汇总(一)

汇总整理在面试过程中常见的问题,如果都能回答下来,那么面试肯定不成问题的分别构建不同抽象级的transaction,来实现复杂的激励。(以前是单一层次的sequence,对激励复用、上层复用不塌友好)不同层级之间的sequence没有继承关系,相互之间进行转换低层次的sequence从高层次的sequencer中获取高层次的sequence,并将其转换为低层次的sequence,再通过低层次的sequencer发送出去如何连接:低层次的sequencer包含高层次sequencer的句柄。

qq_42135020的博客 3152

主题033:燃烧反应工程

燃烧反应工程(Combustion Reaction Engineering)是研究燃料与氧化剂发生剧烈氧化反应的科学,涉及化学反应动力学、流体力学、传热传质等多个学科。燃烧是人类利用能源的主要方式,广泛应用于发电、交通运输、工业加热等领域。燃烧反应通常通过自由基链式反应进行。链引发:RH+O2⟶R⋅+HO2⋅ RH + O_2 \longrightarrow R^\cdot + HO_2^\cdot RH+O2​⟶R⋅+HO2⋅​链传递:R⋅+O2⟶RO2⋅ R^\cdot + O_2 \longrigh

kkchenjj的博客 231

HDU 4185 Oil Skimming(二分匹配,匈牙利算法)

Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 87    Accepted Submission(s): 50 Problem Description Thanks to a certain "green"...

weixin_33716557的博客 335

RK3588&RK3576实现 HW-ID DTB(动态加载不同的Kernel DTB)功能

RK平台的U-Boot⽀持检测硬件上的GPIO或者ADC状态动态加载不同的Kernel DTB,暂称为HW-ID DTB(Hardware id DTB)功能。

Wynter 849

HDU-4185 Oil Skimming(二分匹配,匈牙利算法)

题意:给出一个N*N图,#表示有油,.表示水。现在要统计最多有多少块符合条件的油田条件:油田不能重合,为1 x 2 的矩形,可以竖着1x2也可以横着1x2。思路:我们可以把所有的油田看作一个单独的块,匹配时就搜索当前块上下左右相邻是否有油田实际上就是 油田作为一个点,两两相邻的点符合条件就连接一条边。然后用二分图的匹配形式去找到最大匹配同时这种最大匹配实际上有重复(连成无相图了),所以最...

169

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Oil Skimming (二分图最大匹配)

Thanks to a certain "green" resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floating in the Gulf of Mexico just waiting to be scooped up by e...

a1046765624的博客 409

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

HDU 4185 - Oil Skimming ( 二分图匹配, 匈牙利算法 )

题意 给出一个 n * n的油田,现在要撇去一些油,但是每次只能撇掉1 * 2或者2 *1的油,问最多能撇多少次。 思路 匹配 建图:给每个“#”标序号后,dfs找每个油田位置的上下左右是否有油田,若有则建边。跑匈牙利匹配即可。 AC代码 #include <iostream> #include <...

a7152326的博客 142

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

HDU 4185 Oil Skimming (二分图匹配)

题意:给定一张n*n的图,求不重复的两个相邻“#”有多少组。 题解:二分图匹配 对于点“#”进行编号,遍历的时候若当前字符是“#”,与它上下左右是“#”的建边,由于是无向图,跑出的最大匹配 / 2就是答案。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm>

gongyuandaye的博客 243

HDU 4185 Oil Skimming(离散化 + 二分图匹配)

#include #include #include #include #include #include #include #include #include #define LL long long #define FOR(i, x, y) for(int i=x;i<=y;i++) using namespace std; const int MAXN = 600 + 10

蘑菇--走在通往梦想的道路上。 790

HDU 4185 Oil Skimming (最大匹配)

Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2522    Accepted Submission(s): 1041 Problem Description Thanks to a c

K键盘里的青春K 611

HDU4185 Oil Skimming 二分图匹配 匈牙利算法

原文链接http://www.cnblogs.com/zhouzhendong/p/8231146.html 题目传送门 - HDU4185 题意概括   每次恰好覆盖相邻的两个#,不能重复,求最大覆盖次数。(引用大佬的http://blog.youkuaiyun.com/u011721440/article/details/38144339) 题解   我们对于每两个相邻#的建边(来回...

weixin_30319097的博客 144

HDU 4185 Oil Skimming(匈牙利算法)

Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1822    Accepted Submission(s): 754 Problem Description Thanks to a ce

aozil_yang的博客 500

Oil Skimming HDU - 4185 (二分图最大匹配)

Oil Skimming  HDU - 4185  Thanks to a certain "green" resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floating in the Gul

codeswarrior的博客 618

HDU-4185 Oil Skimming

首先一个2*1的矩形可以覆盖两点,这两点一定相邻 如果要把这个矩阵染成黑白两色,可以把相邻两点染成不同颜色,像是国际象棋棋盘那样 可以发现,一个矩形一定覆盖一个黑色和一个白色,可以看作是相邻两点之间的边 这样就转化成了二分图最大匹配问题,黑色点和白色点为二分图的两部分,相邻点之间建边,求最大匹配 我用了HK算法求最大匹配,匈牙利算法估计会超时 #include&lt;iostream&...

wl16wzl的博客 238

[HDOJ4185]Oil Skimming(二分图最大匹配,匈牙利算法xKM算法)

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4185 题意:一片(n*10)*(n*10)的平面上有油(#)也有水(.),现在有规格为10*20的铲子(相当于每个铲子可以覆盖1*2或者2*1的平面)想要把油盖上,铲子不能相交。问如何分配才能把油尽可能多地覆盖到。 思路:给每个#编号,按照编号,油如果有相邻的,则给他们的编号建一...

weixin_30795127的博客 131

kuangbin专题十 HDU4185 Oil Skimming(二分图+建图)

题意: 有一个n*n的油田,里面有水和油,大小为1,一个土豪可以用1*2大小方块的勺子把油田覆盖,但是不能有水。问你要最大可以用多少个勺子覆盖油田。 题解: 匈牙利算法模板题,难就难在建图,ORZ感觉自己好笨,老是想着该怎么让点跟行或者列有关系,殊不知是让点跟点产生联系,md感觉自己好笨,就是查看‘#’的上下左右是否有’#’然后建图就行了。#include<stdio.h> #

Start_to_crazy的博客 438
上一篇: F - Rain on your Parade (HK)
下一篇: H - Antenna Placement (最小路径覆盖)
team39
博客等级 码龄9年 80粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值