二分图匹配

 #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. The C10K problem

    原文链接:http://www.kegel.com/c10k.html It's time for web servers to handle ten thousand clients simulta ...

  2. 利用LM神经网络和决策树去分类

    # -*- coding: utf-8 -*- import pandas as pd from scipy.interpolate import lagrange from matplotlib i ...

  3. [Js]缓冲运动

    一.运动框架 1.在开始运动时,关闭已有定时器(否则会不断有新的定时器执行) 2.把运动和停止隔开(if/else) 二.缓冲运动 逐渐变慢,最后停止(距离越远速度越大) 速度=(目标值-当前值)/缩 ...

  4. MM 不哭 (tyvj 1097)

    题目大意: 一条数轴上有 n 个 MM 在哭,需要tcboy去安慰,tcboy 一开始站在第k个MM身边,每个MM 哭都会减掉tcboy的RP. 确定安慰MM的顺序使得RP扣得最少.求 min(Rp_ ...

  5. Jquery判断div是否显示

    $("#test").is(":hidden");//是否隐藏 $("#test").is(":visible");// ...

  6. AOP面向切面编程

    1.AOP Aop(aspect object programming)面向切面编程 功能: 让关注点代码与业务代码分离! 关注点 重复代码就叫做关注点: 切面 关注点形成的类,就叫切面(类)! 面向 ...

  7. https需要的类

    import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import j ...

  8. C# WinForm程序向datagridview里添加数据

    在C#开发的winform程序中,datagridview是一个经常使用到的控件.它可以以类似excel表格的形式规范的展示或操作数据,我也经常使用这个控件.使用这个控件首先要掌握的就是如何向其中插入 ...

  9. bjui简单了解

    bjui官网:http://demo.b-jui.com/ 其他的我就不是很了解,恶心.

  10. word表格从 web版视图 转 到页面视图 模式后 表格的一部分显示不出来

    解决办法 在web视图 中选择 表格  ----->右键  表格属性  表格 下面 的  文字环绕  选择 无