ZOJ1654-Place the Robots【最大匹配,图论】

正题


大意

一个n*m个地方,有墙,草地和空地。在空地可以放机器人,机器人会将看到的其他机器人 [河蟹] 掉。他不能隔墙看。求最多能放多少个机器人。


解题思路

这里用一种奇特的构图方法,
(盗一下ppt里的图)
场地
这里写图片描述

然后每一个机器人按照行和列碰墙建图
这里写图片描述
这里写图片描述
然后把重叠的部分连接起来
这里写图片描述

然后求最大匹配


代码

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct line{int next,to;
}l[1250*1250];
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
int tot2,t,tot,w,n,m,a[1250][1250],a2[1250][1250],p,o,s,ls[1250],link[1250];
char c[1250][1250];
bool cover[1250];
bool check(int x,int y)
{if (x<1 || y<1 || x>n || y>m) return false;if (c[x][y]=='#') return false;return true;
}
void add(int x,int y)
{l[++w].next=ls[x];l[w].to=y;ls[x]=w;
}
bool find(int x)
{for (int q=ls[x];q;q=l[q].next){if (!cover[l[q].to]){cover[l[q].to]=true;int p=link[l[q].to];link[l[q].to]=x;if (!p || find(p)) return true;link[l[q].to]=p;}}return false;
}
int main()
{scanf("%d",&t);for (int ti=1;ti<=t;ti++){s=w=tot=tot2=0;memset(ls,0,sizeof(ls));memset(link,0,sizeof(link));scanf("%d%d",&n,&m);scanf("\n");for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){cin>>c[i][j];a[i][j]=0;a2[i][j]=0;}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){if (c[i][j]=='o' && !a[i][j]){a[i][j]=++tot;for (int k=0;k<2;k++)//左右{p=1;while (check(i+dx[k]*p,j)){a[i+dx[k]*p][j]=tot;p++;}}}if (c[i][j]=='o' && !a2[i][j]){a2[i][j]=++tot2;for (int k=2;k<4;k++)//上下{p=1;while (check(i,j+dy[k]*p)){a2[i][j+dy[k]*p]=tot2;p++;}}}}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (a[i][j] && a2[i][j]&&c[i][j]=='o') add(a[i][j],a2[i][j]);//处理冲突for (int i=1;i<=tot;i++){memset(cover,false,sizeof(cover));if (find(i)) s++;//求最大匹配}printf("Case :%d\n%d\n",ti,s);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

彻底理解JVM常考题之分级引用模型

转载自 彻底理解JVM常考题之分级引用模型 本文通过探析Java中的引用模型&#xff0c;分析比较强引用、软引用、弱引用、虚引用的概念及使用场景&#xff0c;知其然且知其所以然&#xff0c;希望给大家在实际开发实践、学习开源项目提供参考。 Java的引用 对于Java中的垃圾…

越优秀的人越努力,越努力的人越幸运!

昨日晚间&#xff0c;学校值班&#xff0c;在楼道里面巡查几遍之后发现无异常情况&#xff0c;接着就去值班室中打开电脑忙自己的事。过了没一会儿&#xff0c;3班三学生去找我了&#xff0c;对我说&#xff0c;最近班里的学习情况不是太好&#xff0c;部分学生上课容易打盹&am…

SOA和微服务之间的区别

近几年&#xff0c;我们有很多文章对SOA和微服务之间的不同点和相似点进行了分析。有些人认为SOA有很多地方是值得微服务学习的&#xff0c;而有些人则认为区别对待微服务和SOA会更好。而Neal Ford认为&#xff0c;将单体迁移到面向服务的架构要比迁移到微服务来得容易。关于选…

vijos1056-图形面积【离散化】

正题 题目链接&#xff1a;https://vijos.org/p/1056 大意 给出几个矩形的左上坐标和右下坐标求所有矩形覆盖了的总面积。 解题思路 就是一个简单的离散而已。 代码 #include<iostream> #include<algorithm> using namespace std; long long xx[201],yy[201],l…

考研生的努力程度是有多恐怖!

2021年全国研究生招生考试在12月26日开始&#xff0c;不过我没有参加。早就听闻考研生是多么多么的努力&#xff0c;今日一见&#xff0c;果然名不虚传&#xff0c;在这之前他们是有多努力我不知道&#xff0c;但是今天我所见到他们努力的程度&#xff0c;可以用恐怖来形容。偶…

设计数据库表时,你真的会选数据类型吗

转载自 设计数据库表时&#xff0c;你真的会选数据类型吗 关系型数据库&#xff0c;是开发人员最常接触的持久化存储之一了&#xff0c;使用关系型数据库有很多好处&#xff0c;比如支持通过事务处理保持数据的一致性、数据更新的开销很小、可以进行Join等复杂查询等。 同时…

全文索引 - Pomelo.EFCore.MySql

背景 全文索引&#xff1a;MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索&#xff0c;可以利用全文索引来提高匹配的速度。Pomelo.EntityFrameworkCore.MySql&#xff1a;一款第三方MySQL的Entity Framework Core驱动&#xff0c;在GitHub中开源&#xff0c…

ssl2124-涂色【离散化】

正题 大意 又一根长1000000000的棍子&#xff0c;开始时全是白色&#xff0c;进行n此染色操作&#xff0c;求最长的白色区域。 解题思路 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int f[20001]; int ex,ey,a[5001],…

“老师,为什么我一上课就感到困,听课听的总是走神?”

“老师,为什么我一上课就感到困,听课听的总是走神?” “老师,为什么我你讲的每个题我都能听明白,但是让我自己做我就一点思路都没有呢?” “老师,我记下来语法了,但是还是不会用怎么办?” “老师,我……” 怎么办?怎么办?急死了! 今天老师就给你解答一下你的为什么…

高并发场景下的限流策略

转载自 高并发场景下的限流策略 在高并发的场景下&#xff0c;我们的优化和保护系统的方式通常有&#xff1a;多级缓存、资源隔离、熔断降级、限流等等。 今天我们来聊聊限流。 为什么需要限流 举个比较简单的例子&#xff0c;正常来说&#xff0c;一个员工A他每天能够处理…

Entity Framework Core 批处理语句

在Entity Framework Core (EF Core)有许多新的功能&#xff0c;最令人期待的功能之一就是批处理语句。那么批处理语句是什么呢&#xff1f;批处理语句意味着它不会为每个插入/更新/删除语句发送单独的请求&#xff0c;它将在数据库的单次请求中批量执行多个语句。在这篇文章中&…

mybatis和spring整合时这个报错,应该这样解决!

01问题描述今天在写mybatis和spring整合的时候&#xff0c;出现了个问题&#xff0c;其实也没有多难&#xff0c;就是自己没有仔细看&#xff0c;特此记录一下。报错问题如下&#xff1a;org.springframework.beans.factory.BeanCreationException: Error creating bean with n…

P1496 vijos1165-火烧赤壁【离散化】

正题 题目链接&#xff1a; 洛谷&#xff1a;https://www.luogu.org/problemnew/show/P1496 vijos&#xff1a;https://vijos.org/p/1165 大意 有n艘被烧了的船&#xff0c;给出头坐标和尾坐标&#xff0c;求被烧了的位置的总长度。 解题思路 先用离散化。把船的头坐标排序…

一个简单的例子,学习自定义注解和AOP

转载自 一个简单的例子&#xff0c;学习自定义注解和AOP 记得今年年初刚开始面试的时候&#xff0c;被问的最多的就是你知道Spring的两大核心嘛&#xff1f;那你说说什么是AOP&#xff0c;什么是IOC&#xff1f;我相信你可能也被问了很多次了。 1、到底是什么是AOP&#xff…

Xamarin for iOS 11(一) - 初尝ARKit

编者语&#xff1a;Xamarin 的兼容性是它最大的优点&#xff0c;对于iOS / Android 新的功能支持也是无缝的&#xff0c;做到100%兼容。Xamarin.ios for iOS 11.0的支持已经开始&#xff0c;大家可以在这里下载最新的Preview支持 (https://releases.xamarin.com/preview-xcode-…

挺不喜欢下雪的

你要储蓄你的可爱&#xff0c;眷顾你的善良&#xff0c;变得勇敢。当这个世界越来越坏时&#xff0c;只希望你能越来越好。——《南山南》昨天夜间&#xff0c;窗外雪花飘飘&#xff0c;朋友圈中到处都是晒下雪的照片&#xff0c;有的说是“这是2020年的第一场雪”&#xff0c;…

【2018.4.21】模拟赛之一-ssl2402 世界语【水题】

正题 大意 就是将1到10改为 “unu”,”du”,”tri”,”kvar”,”kvin”,”ses”,”sep”,”ok”,”nau”,”dek” 然后如果是十几&#xff1a; 如12&#xff1a;”dek du” 如果是几十几&#xff1a; 如88&#xff1a;”dudek du” 解题思路 就是判断就好了&#xff0c;…