HDOJ 5093 Battle ships 二分图匹配
二分图匹配:
分别按行和列把图展开。hungary二分图匹配。
。。。
例子:
4 4
*ooo
o###
**#*
ooo*
按行展开。 。。 。
*ooo
o#oo
oo#o
ooo#
**#o
ooo*
ooo*
再按列展开。。。 7 * 8
*ooooooo
oooooooo
oooooooo
oooooooo
*o*ooooo
ooooooo*
ooooooo* 匹配结果3
Battle ships
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 106 Accepted Submission(s): 53
Your fleet unfortunately encountered an enemy fleet near the South Pole where the geographical conditions are negative for both sides. The floating ice and iceberg blocks battleships move which leads to this unexpected engagement highly dangerous, unpredictable
and incontrollable.
But, fortunately, as an experienced navy commander, you are able to take opportunity to embattle the ships to maximize the utility of cannons on the battleships before the engagement.
The target is, arrange as many battleships as you can in the map. However, there are three rules so that you cannot do that arbitrary:
A battleship cannot lay on floating ice
A battleship cannot be placed on an iceberg
Two battleships cannot be arranged in the same row or column, unless one or more icebergs are in the middle of them.
For each test case, two integers m and n (1 <= m, n <= 50) are at the first line, represents the number of rows and columns of the battlefield map respectively. Following m lines contains n characters iteratively, each character belongs to one of ‘#’, ‘*’,
‘o’, that symbolize iceberg, ordinary sea and floating ice.
2
4 4
*ooo
o###
**#*
ooo*
4 4
#***
*#**
**#*
ooo#
3
5
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int maxn=2600; char mp[55][55];
char hang[maxn][maxn];
char lie[maxn][maxn]; int n,m;
int nn,mm; void getHang()
{
nn=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(mp[i][j]=='o')
{
hang[nn][j]='o';
}
else if(mp[i][j]=='*')
{
hang[nn][j]='*';
}
else if(mp[i][j]=='#')
{
hang[nn][j]='#';
for(int k=j+1;k<m;k++)
{
hang[nn][k]='o';
}
if(j!=m-1)
{
nn++;
for(int k=0;k<=j;k++)
{
hang[nn][k]='o';
}
}
}
}
nn++;
}
/*********************debug***********************
cout<<" debug hang \n";
for(int i=0;i<nn;i++)
{
printf("%s\n",hang[i]);
}
*********************debug***********************/
} void getLie()
{
mm=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<nn;j++)
{
if(hang[j][i]=='*')
{
lie[j][mm]='*';
}
else if(hang[j][i]=='o')
{
lie[j][mm]='o';
}
else if(hang[j][i]=='#')
{
for(int k=j;k<nn;k++)
{
lie[k][mm]='o';
}
if(j!=nn-1)
{
mm++;
for(int k=0;k<=j;k++)
{
lie[k][mm]='o';
}
}
}
}
mm++;
}
/**************debug lie*******************
cout<<"debug lie\n";
cout<<nn<<" * "<<mm<<endl;
for(int i=0;i<nn;i++)
{
for(int j=0;j<mm;j++)
{
printf("%c",lie[i][j]);
if(j==mm-1) putchar(10);
}
}
**************debug lie*******************/
} struct Edge
{
int to,next;
}edge[maxn*maxn]; int Adj[maxn],Size; void init()
{
memset(Adj,-1,sizeof(Adj)); Size=0;
} void add_edge(int u,int v)
{
edge[Size].to=v; edge[Size].next=Adj[u]; Adj[u]=Size++;
} int linker[maxn];
bool used[maxn]; bool dfs(int u)
{
for(int i=Adj[u];~i;i=edge[i].next)
{
int v=edge[i].to;
if(!used[v])
{
used[v]=true;
if(linker[v]==-1||dfs(linker[v]))
{
linker[v]=u;
return true;
}
}
}
return false;
} int hungary()
{
int res=0;
memset(linker,-1,sizeof(linker));
for(int u=0;u<nn;u++)
{
memset(used,false,sizeof(used));
if(dfs(u)) res++;
}
return res;
} int main()
{
int T_T;
scanf("%d",&T_T);
while(T_T--)
{
memset(mp,0,sizeof(mp));
memset(hang,0,sizeof(hang));
memset(lie,0,sizeof(lie));
init(); scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",mp[i]); getHang();
getLie(); /// build graph for(int i=0;i<nn;i++)
{
for(int j=0;j<mm;j++)
{
if(lie[i][j]=='*')
{
add_edge(i,j);
}
}
} printf("%d\n",hungary());
}
return 0;
}
HDOJ 5093 Battle ships 二分图匹配的更多相关文章
- hdoj 5093 Battle ships 【二分图最大匹配】
题目:pid=5093" target="_blank">hdoj 5093 Battle ships 题意:给你一个n*m的图,图中有冰山 '# ',浮冰 'o' ...
- HDU 5093 Battle ships(二分图最大匹配)
题意:一个m行n列的图由#.*.o三种符号组成,分别代表冰山.海域.浮冰,问最多可放的炮舰数(要求满足以下条件) 1.炮舰只可放在海域处 2.两个炮舰不能放在同一行或同一列(除非中间隔着一个或多个冰山 ...
- Battle ships(二分图,建图,好题)
Battle ships Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
- hdu 5093 Battle ships
二分图匹配 #include<cstdio> #include<cstring> #include<iostream> #include<cmath> ...
- hdu 5093 Battle ships (二分图)
二分图最大匹配问题 遇到冰山就把行列拆成两个部分.每个部分x也好,y也好只能匹配一次 图画得比较草,将就着看 横着扫一遍,竖着扫一遍,得到编号 一个位置就对应一个(xi,yi)就是X集到Y集的一条边, ...
- hdu 5093 Battle ships(二分图最大匹配)
题意: M*N的矩阵,每个格子上是三个之一:*.o.#. (1 <= m, n <= 50) *:海洋,战船可以停在上面. o:浮冰,战船 ...
- Hdu5093 Battle ships 二分图
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...
- hdu 5093 Battle ships 匈牙利 很巧妙的建图思路
//这题逼我把匈牙利学了 之前一直很勤快敲网络流 而且不以为耻反以为荣 解:首先按行扫描编号,如果在同一块中(即可以相互攻击),那么将其标为相同的数组,对列也做同样的操作. 然后扫描整张图,如果行编号 ...
- hdu 5093 放置战舰 二分图匹配
http://acm.hdu.edu.cn/showproblem.php?pid=5093 给定一个MxN大小的图,有3种点,冰山.浮冰.海.现在希望能在图中放置尽可能多的船.船的四个方向上不能有其 ...
随机推荐
- ASP.NET-FineUI开发实践-6(三)
自动补全也算是好东西吧,我也不清楚下拉列表可以过滤为啥还有自动补全,其实自动补全用到还是通过jq获取服务端的动态数据补全.我没做动态的例子,其实好写,就不写了. 1.用到了两个js包 <scri ...
- jQuery幻灯插件:Nivo Slider
使用步骤 1.引入css文件 default.css 设置展示插件所需的样式,像控制导航键,导航按钮样式,当然你可以自己写个样式 nivo-slider控制图片样式,插件所需的CSS文件 <li ...
- Cacti添加IO模板并监控磁盘IO
1.下载Cacti_Net-SNMP_DevIO_v3.1.zip 下载Cacti_Net-SNMP_DevIO_v3.1.zip,解压并上传net-snmp_devio.xml到/resource/ ...
- PHP Libxml
PHP Libxml 函数 PHP:指示支持该函数的最早的 PHP 版本. 函数 描述 PHP libxml_clear_errors() 清空 Libxml 错误缓冲. 5 libxml_get_e ...
- PHP 类型比较表
以下的表格显示了 PHP 类型和比较运算符在松散和严格比较时的作用.该补充材料还和类型戏法的相关章节内容有关.同时,大量的用户注释和 » BlueShoes 的工作也给该材料提供了帮助. 在使用这些表 ...
- static和const关键字的作用
static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...
- osg for android (一) 简单几何物体的加载与显示
1. 首先需要一个OSG for android的环境. (1).NDK 现在Eclipse 对NDK已经相当友好了,已经不需要另外cygwin的参与,具体可以参考 Android NDK开发篇(一) ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
- Nuc900 bsp turbowriter使用注意点
Nuc900 bsp turbowriter使用注意点 一. Nor flash 用turbo 烧写kernel和文件系统时的注意点: 1. kernel的image No要大于rootfs 2.烧写 ...
- JQUERY1.9学习笔记 之基本过滤器(六) 页眉选择器
页眉选择器jQuery( ":header" ) 描述:选择页眉的所有标签,如 h1,h2, h3 等. <!DOCTYPE html><html lang=&q ...