hdu 5093 Battle ships
二分图匹配
- #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的更多相关文章
- HDU 5093 Battle ships(二分图最大匹配)
题意:一个m行n列的图由#.*.o三种符号组成,分别代表冰山.海域.浮冰,问最多可放的炮舰数(要求满足以下条件) 1.炮舰只可放在海域处 2.两个炮舰不能放在同一行或同一列(除非中间隔着一个或多个冰山 ...
- hdu 5093 Battle ships 匈牙利 很巧妙的建图思路
//这题逼我把匈牙利学了 之前一直很勤快敲网络流 而且不以为耻反以为荣 解:首先按行扫描编号,如果在同一块中(即可以相互攻击),那么将其标为相同的数组,对列也做同样的操作. 然后扫描整张图,如果行编号 ...
- hdu 5093 Battle ships (二分图)
二分图最大匹配问题 遇到冰山就把行列拆成两个部分.每个部分x也好,y也好只能匹配一次 图画得比较草,将就着看 横着扫一遍,竖着扫一遍,得到编号 一个位置就对应一个(xi,yi)就是X集到Y集的一条边, ...
- hdu 5093 Battle ships(二分图最大匹配)
题意: M*N的矩阵,每个格子上是三个之一:*.o.#. (1 <= m, n <= 50) *:海洋,战船可以停在上面. o:浮冰,战船 ...
- hdoj 5093 Battle ships 【二分图最大匹配】
题目:pid=5093" target="_blank">hdoj 5093 Battle ships 题意:给你一个n*m的图,图中有冰山 '# ',浮冰 'o' ...
- HDOJ 5093 Battle ships 二分图匹配
二分图匹配: 分别按行和列把图展开.hungary二分图匹配. ... 例子: 4 4 *ooo o### **#* ooo* 按行展开. .. . *ooo o#oo oo#o ooo# **#o ...
- Hdu 5093 Battle Ship
每个海面要么放要么不放,因此可以用二分图匹配, 考虑把同一行内的能互相看到的点放到一个行块里,同一列内能看到的点放到一个列块里,然后每一个行块都可以和该行块里所有海面的列块连边,选了这个行块,就必须选 ...
- Codeforces 567D One-Dimensional Battle Ships
传送门 D. One-Dimensional Battle Ships time limit per test 1 second memory limit per test 256 megabytes ...
- 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 ...
随机推荐
- qml package 的使用
什么时候使用这个.就是多个view使用同一个deleagte的时候. The Package class is used in conjunction with VisualDataModel to ...
- eclipse常用的字体
1.consolas 2.Segoe Script 3.Segoe Print 4.Courier New
- cordova 5.0 白名单
最新的cordova 5.0 更新了白名单机制,增强了安全性,但是也给我们在开发中带来了很多问题: 当你引入谷歌.百度地图时,会出现 Failed to load resource -- 解决办法: ...
- 黑客界大拿tombkeeper文章:怎么学好技术成为技术大拿(题目我自拟的)
这两天论坛上又有人开始抱怨世风日下,大家都现实了,都不开放了,不交流了.对这种“月经贴”,我基本上已经习惯了,不过因为吃了粉皮炖鸡,心情比较好,于是就说了两句. 三四年前,当时我对人性的看法还不像现在 ...
- SharePoint 2013 开发——SharePoint APP介绍
博客地址:http://blog.csdn.net/FoxDave 新的APP模型让我们能够创建看起来像是SharePoint的一部分的应用程序,但是它完全运行在独立于SharePoint服务器 ...
- 立体透视 perspective transform-style 倾斜旋转
1.perspective 是设置镜头距离,距离越远视图越小,视图越近,视图越大.就像相机焦距一样.其只对子元素产生效果. 2.transform-style: preserve-3d 设置3d效果, ...
- HTML--2图片热点,网页划区,拼接
图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. 示例: 网页划区: 在一个网页里,规划出一个区域用来展示另一个网页的内容. 示例: 网页的拼接: 在一个网络 ...
- lightoj1085 线段树+dp
//Accepted 7552 KB 844 ms //dp[i]=sum(dp[j])+1 j<i && a[j]<a[i] //可以用线段树求所用小于a[i]的dp[j ...
- poj1160 dp
//Accepted 564 KB 63 ms //和hdu1227一样 //dp[i][j]=min(dp[i][j],dp[k][j-1]+cost[k+1][i]) //初始化条件,dp[0][ ...
- FMDB数据库中的一些操作
#pragma mark - 数据库的操作 - (BOOL)judgeModel:(TaskResourceModel *)model isInArray:(NSArray *)shopArray { ...