UVALive 6525 Attacking rooks 二分匹配 经典题

题目链接:点击打开链接

题意:

给定n*n的棋盘,

能够在'.'上摆 象棋中的车(X是墙壁)

使得随意两个车都不能互相攻击到

问:最多能摆多少个车。

思路:

二分匹配

1、若没有X。那么做法就是 X点集为行,Y点集为列,对于图上的每一个点所在的行和列(x,y) 建一条边 x->y

2、有了X,那么对于每一个点所在的上方能接触到的X必须各不同样。所以给每一个X标号,第一个X标记成n+1

3、这样X点集就是行(1-n) 和 n+1-siz (siz是X的个数)

4、对于每一个点,上方能接触到的近期的X作为列,右方能接触到的近期的Y作为行,建一条边 X->Y


而处理每一个点上方能接触到的近期的X就是一个dp。右方也是相同处理。

然后跑个二分匹配就好。


<pre name="code" class="cpp">#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
template <class T>
inline bool rd(T &ret) {char c; int sgn;if(c=getchar(),c==EOF) return 0;while(c!='-'&&(c<'0'||c>'9')) c=getchar();sgn=(c=='-')?-1:1;ret=(c=='-')?0:(c-'0');while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');ret*=sgn;return 1;
}
template <class T>
inline void pt(T x) {if (x <0) {putchar('-');x = -x;}if(x>9) pt(x/10);putchar(x%10+'0');
}
using namespace std;
const int N = 10105;
struct Edge{int to, nex;
}edge[N*2];
int head[N], edgenum;
void init(){memset(head, -1, sizeof head); edgenum = 0;}
void add(int u, int v){Edge E = {v, head[u]};edge[edgenum] = E;head[u] = edgenum++;
}
int lef[N], pn;
int tim, T[N];bool match(int x){for(int i=head[x]; ~i; i=edge[i].nex){int v = edge[i].to;if(T[v] != tim){T[v] = tim;if(lef[v] == -1 || match( lef[v] ))   //match(lef[v]) : 原本连接v的X集点 lef[v] 能不能和别人连。假设能 则v这个点就空出来和x连{lef[v] = x;return true;}}}return false;
}int solve(){int ans = 0;memset(lef, -1, sizeof(lef));for(int i = 1; i<= pn; i++)//X集匹配。X集点标号从 1-pn 匹配边是G[左点].size(){tim++;if( match( i ) ) ans++;}return ans;
}
int n, siz, s[105][105], l[105][105], mp[105][105];
char str[105];
void input(){siz = n;for(int i = 1; i <= n; i++){scanf("%s", str+1);for(int j = 1; j <= n; j++){if(str[j] == 'X')mp[i][j] = ++siz;elsemp[i][j] = 0;}}
}
void build(){for(int i = 1; i <= n; i++)s[0][i] = i;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)if(mp[i][j])s[i][j] = mp[i][j];elses[i][j] = s[i-1][j];for(int i = 1; i <= n; i++)l[i][n+1] = i;for(int i = n; i; i--){for(int j = 1; j <= n; j++)if(mp[j][i])l[j][i] = mp[j][i];elsel[j][i] = l[j][i+1];}init();pn = siz;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)if(mp[i][j] == 0)add(l[i][j+1], s[i-1][j]);
}
int main(){tim = 1; memset(T, 0, sizeof T);while(cin>>n){input();build();cout<<solve()<<endl;}return 0;
}
/*
5
X....
X....
..X..
.X...
....X3
.X.
XXX
XXX3
.X.
X.X
XXX3
.X.
X.X
X.X3
.X.
X.X
.X.
3
XXX
XXX
XXX
15
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX*/


 

转载于:https://www.cnblogs.com/yxwkf/p/5269605.html

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

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

相关文章

CSDN主页下如何添加访客地图?

有大佬在付费专栏作者群提问这个问题,我们先来研究一下哈。 先看聊天记录吧 放大效果 这位博主是如何实现的呢? 我拿到了这个博客的地址,使用谷歌浏览器F12,拿到这部分代码。他这个是在自定义模块添加访问地图。 自定义模块需要是博客专家,企业博客或者VIP才可以编辑。只…

html 适配 android,Android 版本适配 6~11

android 6.0 : 权限动态申请(仅限危险权限)android 7.0: 应用间共享文件(FileProvider); signature versions (v1,v2全部勾选)android 8.0 : 通知栏 &#xff1b; 静态广播被限制使用 &#xff1b;去除允许未知来源安装通知栏&#xff1a;通知渠道级别(例如广告…

lucene_indexWriter说明、索引库优化

IndexWriter Hibernate的SessionFactory在Hibernate中。一般保持一个数据库就仅仅有一个SessionFactory。由于在SessionFactory中维护二级缓存&#xff0c;而SessionFactory又是线程安全的。所以SessionFactory是共享的。lucene的IndexWriter假设同一时候在一个索引库中同一时候…

600W个微信红包封面,人人都能领取到!!!

过年啦&#xff0c;祝大家春节快乐牛年大吉&#xff0c;万事如意&#xff01;别忘了春节还有红包封面领取新的一年愿大家财运亨通&#xff01;新年过完了&#xff0c;整理情绪上班了&#xff0c;祝福没有断&#xff0c;问候也依然。努力工作多表现&#xff0c;年后年终奖永远把…

android 二次绘制 layout,View的三次measure,两次layout和一次draw

我在《Android视图结构》这篇文章中已经描述了Activity,Window和View在视图架构方面的关系。前天&#xff0c;我突然想到为什么在setContentView中能够调用findViewById函数&#xff1f;View那时不是还没有被加载&#xff0c;测量&#xff0c;布局和绘制啊。然后就搜索了相关的…

mule esb 集成_集成框架比较– Spring集成,Mule ESB或Apache Camel

mule esb 集成公司之间的数据交换增加了很多。 必须集成的应用程序数量也增加了。 这些接口使用不同的技术&#xff0c;协议和数据格式。 然而&#xff0c;这些应用程序的集成应以标准化的方式建模&#xff0c;有效实现并由自动测试支持 。 JVM环境中提供了三个可满足这些要求的…

盘点关于程序员的那些经典案例

深度剖析几个经典话题&#xff0c;以图文的形式展现&#xff0c;好好看图。 目录 1. 2014互联网职场薪酬报告&#xff01;你拖后腿了吗&#xff1f; 2. 月薪8K程序员现身说法&#xff1a;男人就该默默做技术&#xff01; 3.项目建设 4. 2014年亿级用户下的新浪微博平台架构…

html中文字过长 自动隐藏,css 实现文字过长自动隐藏功能

单行overflow: hidden;text-overflow: ellipsis;white-space: nowrap;多行(兼容各个浏览器)//通过覆盖最后几个字的形式p{position:relative;line-height:1.4em;height:4.2em;/* 3 倍line-height 多少倍就是多少行*/overflow:hidden;}.p::after {content:"...";font-…

写博客和生产api的工具

前言&#xff1a; .不要乱管闲事 写博客&#xff1a; 印象中是叫writeAlive之类的工具&#xff1b; 生产api的&#xff1a; 似乎叫hignLight的工具&#xff1b;转载于:https://www.cnblogs.com/zhangzs000/p/5273346.html

使用Xtext为Eclipse和IntelliJ开发DSL

在这篇文章中&#xff0c;我们将看到如何开发一种简单的语言。 我们的目标是&#xff1a; 语言的解析器 IntelliJ的编辑器 。 编辑器应具有语法突出显示&#xff0c;验证和自动完成功能 我们还将免费提供Eclipse和Web编辑器的编辑器 &#xff0c;但请包含您的兴奋之处&#…

搬家后第一次缴电费,查询客户编号的解决办法

最近搬家后&#xff0c;发现家里停电了&#xff0c;不知道客户编号&#xff0c;想通过支付宝生活缴费模块充值。 解决办法。 1.走到电表跟前&#xff0c;连续按下电表白色按钮4-5下。会出现一个四位数的阿拉伯数字。比如&#xff1a;0088。取&#xff0c;后两位88。 2.再按一下…

html字符实体标签语法,HTML字符实体与文本格式化标签

HT环行进端处触码通法果泉位可近境其行框理发ML 字符实体/HTML 中的预留字符必须被替换为字符实体&#xff0c;一些在键盘上找不到的字符也可以使用字符实体来览页些求时是过解些这确如目前例总站回广随能4果泉时标配使能幻近器面实的我是接,前些模小架端如结的事告机对8和水兼…

JavaScript学习总结(思维导图篇)

不管是前端开发还是后端开发,js一直担任着重要的角色。需要深刻理解,才能把工作做得更加出色。 目录 JavaScript BOM对象 JavaScript Dcoument对象 JavaScript 事件处理 JavaScript变量 JavaScript函数基础

ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题

ArcGIS API for Silverlight地图加载众多点时&#xff0c;使用Clusterer解决重叠问题 原文:ArcGIS API for Silverlight地图加载众多点时&#xff0c;使用Clusterer解决重叠问题 问题&#xff1a;如果在地图上加载成百上千工程点时&#xff0c;会密密麻麻&#xff0c;外观不是很…

html 文本框 自动拼接,HTML 中table的结构以及拼接

表格基本上有如下几个标签构成:(1).(2).标签用来创建表格的行。(3).标签用来创建表头单元格。 t-head(4).标签用来创建tr行中的单元格。(5).标签用来创建标题。(6).标签用来创建表格的表头。 (一个table只能有一个)(7).标签用来创建表格的主体部分。(8).标签用来创建表格的页…

大学4年毕业后我是如何还清的助学贷款。

一般的农村大学生,大学期间采用助学贷款的方式修完大学的四年。如何在一两年内还清?这个利息又是如何计算的呢, 目录 我大学欠了多少钱? 大学毕业后要还多少钱? 这个利息如何计算?

谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式

作为一名java工程狮&#xff0c;大家肯定经历过很多面试&#xff0c;但每次几乎都会被问到什么是MVC设计模式&#xff0c;你是怎么理解MVC的类似这样的一系列关于MVC的问题。 【出现频率】 【关键考点】 MVC的含义MVC的结构 【考题分析】  在java Web开发中&#xff0c;存在两…

mvc 一般注释_使用带有注释和JQuery的Spring MVC 3的Ajax

mvc 一般注释与Ajax一起工作对我来说一直很有趣&#xff01; 是不是 &#xff1f; 我将使您轻松将Ajax与Spring MVC 3和JQuery结合使用。 这篇文章将向您说明如何在工业编码的现实生活中使用Ajax。 和往常一样&#xff0c;我们将在Spring MVC 3框架中以Ajax的实际示例为例&…

html中el表达式遍历list,EL表达式在JS中取出来打印[object HTMLDivElement]的问题

今天做项目的时候,要在JS中获取请求参数中的 值,想直接用 ${param.tabName}获取,结果console.debug()打印出来,居然是 [object HTMLDivElement] 类型. 导致无法获取真正的值,原因可能是因为JQ默认把 这个值进行了封装,封装成 HTMLDivElement 对象,导致出问题. 解决办法,就是告…

孙叫兽:我所认为的领导力!

回归领导力的本质&#xff0c;观察反思自己日常的领导力行为&#xff0c;在不断的学习中找到属于自己的最佳答案... 目录 重塑领导力 管理&#xff0c;到底是管人还是管事&#xff1f; 领导力唯一的准则是没有准则 改变自己就能改变公司&#xff1f; 成功的战略10%制定90%执…