二分图匹配

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#define maxn 60
#define maxd 1500
using namespace std;
int v[maxd][maxd],vist[maxd],math[maxd]; int col[maxn][maxn],row[maxn][maxn];
int k1,k2,n,m;
char str[maxn][maxn];
void creat_row()
{
k1=;
for(int i=;i<m;i++)
{
int flag=;
for(int j=;j<n;j++)
{
if(str[i][j]=='*')
{
row[i][j]=k1;
flag=;
}
if(str[i][j]=='#')
{
k1++;
flag=;
}
}
if(flag)
k1++;
}
}
void creat_col()
{
k2=;
for(int j=;j<n;j++)
{
int flag=;
for(int i=;i<m;i++)
{
if(str[i][j]=='*')
{
col[i][j]=k2;
flag=;
}
if(str[i][j]=='#')
{
k2++;
flag=;
}
}
if(flag)
k2++;
}
}
int dfs(int x)
{
for(int i=;i<k2;i++)
{
if(!vist[i]&&v[x][i])
{
vist[i]=;
if(math[i]==-||dfs(math[i]))
{
math[i]=x;
return true;
} }
}
return false;
}
void KM()
{
int ans=;
for(int i=;i<k1;i++)
{
memset(vist,,sizeof(vist));
if(dfs(i)) ans++;
}
printf("%d\n",ans);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&m,&n);
for(int i=; i<m; i++)
scanf("%s",&str[i]);
creat_row();
creat_col();
//printf("%d %d==\n",k1,k2);
memset(v,,sizeof(v));
memset(math,-,sizeof(math));
for(int i=; i<m; i++)
{
for(int j=; j<n; j++)
{
if(str[i][j]=='*')
v[row[i][j]][col[i][j]]=;
} }
KM();
}
return ;
}

hdu 5093 Battle ships的更多相关文章

  1. HDU 5093 Battle ships(二分图最大匹配)

    题意:一个m行n列的图由#.*.o三种符号组成,分别代表冰山.海域.浮冰,问最多可放的炮舰数(要求满足以下条件) 1.炮舰只可放在海域处 2.两个炮舰不能放在同一行或同一列(除非中间隔着一个或多个冰山 ...

  2. hdu 5093 Battle ships 匈牙利 很巧妙的建图思路

    //这题逼我把匈牙利学了 之前一直很勤快敲网络流 而且不以为耻反以为荣 解:首先按行扫描编号,如果在同一块中(即可以相互攻击),那么将其标为相同的数组,对列也做同样的操作. 然后扫描整张图,如果行编号 ...

  3. hdu 5093 Battle ships (二分图)

    二分图最大匹配问题 遇到冰山就把行列拆成两个部分.每个部分x也好,y也好只能匹配一次 图画得比较草,将就着看 横着扫一遍,竖着扫一遍,得到编号 一个位置就对应一个(xi,yi)就是X集到Y集的一条边, ...

  4. hdu 5093 Battle ships(二分图最大匹配)

    题意: M*N的矩阵,每个格子上是三个之一:*.o.#.                     (1 <= m, n <= 50) *:海洋,战船可以停在上面.      o:浮冰,战船 ...

  5. hdoj 5093 Battle ships 【二分图最大匹配】

    题目:pid=5093" target="_blank">hdoj 5093 Battle ships 题意:给你一个n*m的图,图中有冰山 '# ',浮冰 'o' ...

  6. HDOJ 5093 Battle ships 二分图匹配

    二分图匹配: 分别按行和列把图展开.hungary二分图匹配. ... 例子: 4 4 *ooo o### **#* ooo* 按行展开. .. . *ooo o#oo oo#o ooo# **#o ...

  7. Hdu 5093 Battle Ship

    每个海面要么放要么不放,因此可以用二分图匹配, 考虑把同一行内的能互相看到的点放到一个行块里,同一列内能看到的点放到一个列块里,然后每一个行块都可以和该行块里所有海面的列块连边,选了这个行块,就必须选 ...

  8. Codeforces 567D One-Dimensional Battle Ships

    传送门 D. One-Dimensional Battle Ships time limit per test 1 second memory limit per test 256 megabytes ...

  9. Codeforces Round #Pi (Div. 2) D. One-Dimensional Battle Ships set乱搞

    D. One-Dimensional Battle ShipsTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...

随机推荐

  1. C# 如何用计时器Timer控件实现停留几秒再做切换窗体的操作

    C# Timer用法及实例详解 关于C# Timer类  在C#里关于定时器类就有3个 C# Timer使用的方法1.定义在System.Windows.Forms里 C# Timer使用的方法2.定 ...

  2. S1:new操作符

    function Shape(type){ this.type = type || "rect"; this.calc = function(){ return "cal ...

  3. mac下安装apache+php+mysql

    运行“sudo apachectl start”,再输入帐号密码,这样Apache就运行了. 运行“sudo apachectl -v”,你会看到Mac OS X 10.6.3中的Apache版本号: ...

  4. 使用 JDBC 调用函数 & 存储过程

    /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connection connectio ...

  5. struts中的常量,action配置中的默认值

    1.struts中Action的开发方式 继承ActionSupport类,这种方法实现的Action可以进行数据校验: 实现Action接口: 不继承任何类,不实现任何接口: 是否继承类或实现接口, ...

  6. idea常用快捷键大全(转)

    IntelliJ Idea 常用快捷键列表   文章来自:http://lavasoft.blog.51cto.com/62575/97730/   Alt+回车 导入包,自动修正Ctrl+N   查 ...

  7. SharePoint 2013 开发——工作流架构

    博客地址:http://blog.csdn.net/FoxDave SharePoint 2013的工作流较之前有了不同,第一次真正地作为独立的服务的概念推出了.这意味着SharePoint工作流不再 ...

  8. Ajax方法实现登录页面

    Note: ajax技术 不用刷新页面,做局部刷新不用form表单,因为不需要提交,通过JQuery控制必须要有id如果要用ajax可以用JQuery也可以用js写,推荐JQuery 因为简单,直接引 ...

  9. Jquery中的prop()方法 全选或全不选

    注意: prop()在高版本才会有效, 低版本用attr(); $(function(){ // 元素checkbox var aChecked = $('.checkGoods'); // 全选 v ...

  10. js 中 setInterval 的返回值问题

    var i = 0; var timer = setInterval(function() { i++ console.log(i); //alert(1); }, 2000); alert( typ ...