hdu4185二分图匹配
InputThe input starts with an integer K (1 <= K <= 100) indicating the number of cases. Each case starts with an integer N (1 <= N <= 600) indicating the size of the square grid. Each of the following N lines contains N characters that represent the cells of a row in the grid. A character of '#' represents an oily cell, and a character of '.' represents a pure water cell.OutputFor each case, one line should be produced, formatted exactly as follows: "Case X: M" where X is the case number (starting from 1) and M is the maximum number of scoops of oil that may be extracted.Sample Input
1
6
......
.##...
.##...
....#.
....##
......
Sample Output
Case 1: 3
题意:给一张图,问最大的连续两个格子数目有多少
题解:建图太麻烦,实在没想到,看网上思路才a的,把整个图分成i+j%2是否=1两个;然后匹配匈牙利算法就行了
坑点:刚开始以为由于是从上到下,从左到右遍历的,不用算i-1,j-1的情况,才发现这样会少算几种情况。
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007 using namespace std; const int N=+,maxn=+,inf=0x3f3f3f3f; int n,color[N],col,row;
int u[N][N];
char ma[N][N];
bool used[N],ok[N][N]; bool match(int x)
{
for(int i=;i<=row;i++)
{
if(!used[i]&&ok[x][i])
{
used[i]=;
if(color[i]==||match(color[i]))
{
color[i]=x;
return ;
}
}
}
return ;
}
int solve()
{
int ans=;
memset(color,,sizeof color);
for(int i=;i<=col;i++)
{
memset(used,,sizeof used);
ans+=match(i);
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int t;
cin>>t;
for(int k=;k<=t;k++)
{
cin>>n;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
cin>>ma[i][j];
col=row=;
memset(u,,sizeof u);
memset(ok,,sizeof ok);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(ma[i][j]=='#')
{
if((i+j)%==)u[i][j]=++col;
if((i+j)%==)u[i][j]=++row;
}
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if((i+j)%==&&ma[i][j]=='#')
{
if(i+<=n&&ma[i+][j]=='#')ok[u[i][j]][u[i+][j]]=;
if(j+<=n&&ma[i][j+]=='#')ok[u[i][j]][u[i][j+]]=;
if(i->=&&ma[i-][j]=='#')ok[u[i][j]][u[i-][j]]=;
if(j->=&&ma[i][j-]=='#')ok[u[i][j]][u[i][j-]]=;
}
if((i+j)%==&&ma[i][j]=='#')
{
if(i+<=n&&ma[i+][j]=='#')ok[u[i+][j]][u[i][j]]=;
if(j+<=n&&ma[i][j+]=='#')ok[u[i][j+]][u[i][j]]=;
if(i->=&&ma[i-][j]=='#')ok[u[i-][j]][u[i][j]]=;
if(j->=&&ma[i][j-]=='#')ok[u[i][j-]][u[i][j]]=;
}
}
/* for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<u[i][j];
cout<<endl;
}
for(int i=1;i<=col;i++)
{
for(int j=1;j<=row;j++)
cout<<ok[i][j];
cout<<endl;
}*/
cout<<"Case "<<k<<": "<<solve()<<endl;
}
return ;
}
hdu4185二分图匹配的更多相关文章
- UVA 12549 - 二分图匹配
题意:给定一个Y行X列的网格,网格种有重要位置和障碍物.要求用最少的机器人看守所有重要的位置,每个机器人放在一个格子里,面朝上下左右四个方向之一发出激光直到射到障碍物为止,沿途都是看守范围.机器人不会 ...
- POJ 1274 裸二分图匹配
题意:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶,告诉每头奶牛愿意产奶的牛棚编号,求出最多能分配到的牛栏的数量. 分析:直接二分图匹配: #include<stdio.h> #includ ...
- BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2375 Solved: 1005[Submit][Sta ...
- HDU1281-棋盘游戏-二分图匹配
先跑一个二分图匹配,然后一一删去匹配上的边,看能不能达到最大匹配数,不能这条边就是重要边 /*----------------------------------------------------- ...
- HDU 1083 网络流之二分图匹配
http://acm.hdu.edu.cn/showproblem.php?pid=1083 二分图匹配用得很多 这道题只需要简化的二分匹配 #include<iostream> #inc ...
- hdu 5727 Necklace dfs+二分图匹配
Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N mag ...
- BZOJ 1059 & 二分图匹配
题意: 判断一个黑白染色的棋盘能否通过交换行或列使对角线上都是黑色. SOL: 真是有点醉...这种问题要么很神要么很水...第一眼感觉很水但就是不造怎么做...想了10分钟怎么感觉就是判断个数够不够 ...
- 【POJ 3020】Antenna Placement(二分图匹配)
相当于用1*2的板覆盖给定的h*w的格子里的点,求最少的板.可以把格子相邻的分成两个集合,如下图,0为一个集合,1的为一个,也就是(行数+列数)为奇数的是一个集合,为偶数的为另一个集合.1010101 ...
- BZOJ-1143&&BZOJ-2718 祭祀river&&毕业旅行 最长反链(Floyed传递闭包+二分图匹配)
蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...
随机推荐
- linux CentOS6.5 安装SVN & 可视化管理工具iF.SVNAdmin
转:http://tanghenxin.lofter.com/post/1cc667b3_5ac50dc 实际系统环境: CentOS 6.5 x64 一.安装Apache 通常系统都已经装好了,但我 ...
- 用js写倒计时,向列表添加数据-------2017-03-21
一.单选按钮确定提交是否可用 <input id="a" type="radio" name="a" onclick="c ...
- 让CEF支持FLASH(非安装插件的形式)
测试环境: CEF3 + CefGlue 下载FLASH的NPAPI DLL文件 , 在CEF目录下新建文件夹plugins,然后把DLL文件放进去即可. 据说下面是PPAPI的方式,未测试 启动的时 ...
- SpringMVC搭建+实例
想做一点自己喜欢的东西,研究了一下springMVC,所以就自己搭建一个小demo,可供大家吐槽. 先建一个WEB工程,这个相信大家都会,这里不在多说. 去网上下载spring jar包,然后在WEB ...
- 【子非鱼】冒泡排序过程呈现之java内置GUI表示
自己玩玩写写,排序的过程多么有趣,特别是把看着电脑吧一堆乱七八糟的数据排成有序组合的时候,看起来贼舒服,特别是强迫症患者.好了,话不多说上代码,也算是自己记录一下吧,没有什么技术含量但个人感觉比较有趣 ...
- iOS开发之UIPickerView
1.使用方法 UIPickerView使用和UITableView大致类似.首先设置ViewController为数据源,然后遵守数据源协议< UIPickerViewDataRecouce&g ...
- CSS与HTML5响应式图片
随着 Retina 屏幕的逐渐普及,网页中对图片的适配要求也越来越高.如何让图片在放大了两倍的 Retina 屏幕显示依然清晰,曾经一度困扰着网页开发者,好在 CSS3 与 HTML5 已经着力在改变 ...
- Linux之uniq命令
uniq - report or omit repeated lines 省去重复的行 参数: -i 忽略大小写字符的不同 -c 对重复的行进行记数 注意:uniq命令只会对相邻的重复的行进行去 ...
- Java Unicode编码 及 Mysql utf8 utf8mb3 utf8mb4 的区别与utf8mb4的过滤
UTF-8简介 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码.它可以用来表示Unicode标准中的任何 ...
- Java Applet实现五子棋游戏
从谷歌的AlphaGo到腾讯的绝艺,从人脸识别到无人驾驶,从谷歌眼镜到VR的兴起,人工智能领域在不断的向前迈进,也在不断深入的探索.但背后错综复杂的技术和利益成本也是很多企业亟待解决的难题.对于人工智 ...