HDU 4185 Oil Skimming
题目大意:在一个N*N的矩阵里寻找最多有多少个“##”(横着竖着都行)。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
#define INF 0x3fffffff
#define maxn 605
int n, OilNum, k;///重构图之后顶点的个数 OilNum
int Head[maxn];
int maps[maxn][maxn], P[maxn];
bool vis[maxn];
struct Node
{
int e, next;
}edge[maxn];
void AddEdge(int s,int e)
{
edge[k].next = Head[s];
edge[k].e = e;
Head[s] = k ++;
} bool Find(int u)
{
for(int i=Head[u]; i != -; i = edge[i].next)
{
int v = edge[i].e;
if(!vis[v])
{
vis[v] = true;
if(P[v] == - || Find(P[v]))
{
P[v] = u;
return true;
}
}
}
return false;
} int solve()
{
int ans = ;
memset(P, -, sizeof(P));
for(int i=; i<=OilNum; i++)
{
memset(vis, false, sizeof(vis));
if(Find(i))
ans ++;
}
return ans / ;
} int main()
{
int T, cas = ;
char str[maxn];
scanf("%d", &T);
while(T--)
{
scanf("%d", &n); k = OilNum = ;
memset(Head, -, sizeof(Head));
memset(maps, , sizeof(maps)); for(int i=; i<n; i++)///读入图,并且重新标记
{
scanf("%s", str);
for(int j=; j<n; j++)
{
if(str[j] == '.')
maps[i+][j+] = ;
if(str[j] == '#')
maps[i+][j+] = ++OilNum;
}
} for(int i=; i<=n; i++)///重新构图
{
for(int j=; j<=n; j++)
{
if(maps[i][j])
{
if(maps[i-][j])
AddEdge(maps[i][j], maps[i-][j]);
if(maps[i+][j])
AddEdge(maps[i][j], maps[i+][j]);
if(maps[i][j-])
AddEdge(maps[i][j], maps[i][j-]);
if(maps[i][j+])
AddEdge(maps[i][j], maps[i][j+]);
}
}
} printf("Case %d: %d\n", cas ++,solve()); }
return ;
} /*
3
1 0 1
1 0 1
0 1 0
*/
HDU 4185 Oil Skimming的更多相关文章
- HDU 4185 ——Oil Skimming——————【最大匹配、方格的奇偶性建图】
Oil Skimming Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- hdu 4185 Oil Skimming(二分图匹配 经典建图+匈牙利模板)
Problem Description Thanks to a certain "green" resources company, there is a new profitab ...
- HDU 4185 Oil Skimming 【最大匹配】
<题目链接> 题目大意: 给你一张图,图中有 '*' , '.' 两点,现在每次覆盖相邻的两个 '#' ,问最多能够覆盖几次. 解题分析: 无向图二分匹配的模板题,每个'#'点与周围四个方 ...
- 4185 Oil Skimming 最大匹配 奇偶建图
题目大意: 统计相邻(上下左右)的‘#’的对数. 解法: 与题目hdu1507 Uncle Tom's Inherited Land*类似,需要用奇偶建图.就是行+列为奇数的作为X集合,偶尔作为Y集合 ...
- Oil Skimming HDU - 4185(匹配板题)
Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU4185:Oil Skimming(二分图最大匹配)
Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 1241 Oil Deposits --- 入门DFS
HDU 1241 题目大意:给定一块油田,求其连通块的数目.上下左右斜对角相邻的@属于同一个连通块. 解题思路:对每一个@进行dfs遍历并标记访问状态,一次dfs可以访问一个连通块,最后统计数量. / ...
- hdu 1241 Oil Deposits(DFS求连通块)
HDU 1241 Oil Deposits L -DFS Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & ...
- HDU 1241 Oil Deposits(石油储藏)
HDU 1241 Oil Deposits(石油储藏) 00 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Probl ...
随机推荐
- slf4j与log4j
推荐使用SLF4J(Simple Logging Facade for Java)作为日志的api,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统. ...
- cocos2dx JAVA,C++互相调用函数
C++调用JAVA 例子 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include "platform/android/jni/Jni ...
- 【BZOJ1036】【树链剖分】树的统计Count
Description 一 棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. ...
- python3实现邮件发送程序
刚开始的想法很简单,由于有上千封的邮件需要发出去,并且需要一条一条发送,不能转发或群发,每条邮件要署对方的姓名,并加上几个相同的符件,考虑到手工操作繁琐无趣,所以想到用程序实现,python好像非常胜 ...
- 关于CenttOS的防火墙问题
Fix “Unit iptables.service failed to load: No such file or directory” Error In CentOS7 最近在升级CentOS7遇 ...
- 《service》-“linux命令五分钟系列”之二
本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...
- 用css3实现鼠标移进去当前亮其他变灰
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- js字符串倒序
有的时候我们需要把字符串倒序. 比如“范坚强”的倒序就是“强坚范”. 如何对字符串进行倒序呢?你首先想到的方法就是生成一个栈,从尾到头依次取出字符串中的字符压入栈中,然后把栈连接成字符串. var r ...
- dedecms---------自由列表标题:网站地图自由列表
列表HTML存放目录:{cmspath}/ 目录默认页名称:sitemap.xml 命名规则:{listdir}/sitemap.xml 列表模板:{style}/map.htm 循环内的单行记录样式 ...
- js打开新的窗体不被浏览器阻止
转载自js弹出新窗口而不会被浏览器阻止的方法有时候希望可以用js另开新窗口,但用window.open方法打开窗口总是被浏览器阻止, 可以用下面的方法打开新窗口而不会遭到拦截 1.新添加一个Form ...