题目链接

题意:有一个地图.代表水#代表油每个单元格是10*10的,现有10*20的勺子可以提取出水上漂浮的油,问最多可以提取几勺的油;

每次提取的时候勺子放的位置都要是油,不然就被污染而没有价值了;

所以就是求最大匹配的;关键是建立边与边的关系,可以让有油的地方编号为1 2 3。。。然后再连接上下左右的点;

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define N 660
#define INF 0xfffffff
int dir[][] = {{,},{-,},{,},{,-} };
int G[N][N], a[N][N], cnt, vis[N], used[N];///a[i][j]代表这个位置#的编号从1开始;
char maps[N][N];
bool Find(int u)
{
for(int i=; i<cnt; i++)
{
if(!vis[i] && G[u][i])
{
vis[i] = ;
if(!used[i] || Find(used[i]))
{
used[i] = u;
return true;
}
}
}
return false;
}
int main()
{
int T, t=, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
cnt=;
memset(used, , sizeof(used));
memset(G, , sizeof(G));
memset(a, , sizeof(a));
memset(maps, , sizeof(maps));
for(int i=; i<n; i++)
{
scanf("%s", maps[i]);
for(int j=; j<n; j++)
{
if(maps[i][j] == '#')
a[i][j] = cnt++;
}
}
for(int i=; i<n; i++)
{
for(int j=; j<n; j++)
{
if(maps[i][j]=='#')
for(int k=; k<; k++)/// 上下左右建立关系;
{
int x = i+dir[k][];
int y = j+dir[k][];
if(x>= && y>= && x<n && y<n && maps[x][y]=='#')
{
int p=a[x][y];
int q=a[i][j];
G[p][q] = G[q][p] = ;///建图;
}
}
}
}
int ans = ;
for(int i=; i<cnt; i++)
{
memset(vis, , sizeof(vis));
if(Find(i))
ans++;
}
printf("Case %d: %d\n", t++, ans/);
}
return ;
}

最新文章

  1. 大数据系列(3)——Hadoop集群完全分布式坏境搭建
  2. 使用Spring AsyncRestTemplate对象进行异步请求调用
  3. linq 实现group by 不使用group关键字 等同lambad表达式中的group join 查询一对多关系
  4. .NET程序迁移到Mysql的极简方案——让GGTalk同时支持Sqlserver与mysql全程记录!
  5. ASIHTTPRequest详解 [经典3]
  6. iOS 开发技巧总结
  7. java 接收 char字符型
  8. 迭代输出Map和List&lt;Map&lt;String,Object&gt;&gt;的方法
  9. OFBIZ安装
  10. 如何鉴别程序抄袭c语言程序代写
  11. HTML基本介绍
  12. Max Sum(最大子序和)
  13. sublime eslint setup
  14. w3school之JavaScript学习笔记
  15. struts2(一) struts2入门
  16. macOS上的ODBC-利用unixODBC连接PostgreSQL与SQLite并进行数据迁移
  17. verilog实验2:基于FPGA的59秒计时器设计
  18. Oracle 大数据集成实施
  19. Spark DataFrame的groupBy vs groupByKey
  20. Guitar Pro里的编谱方式怎么用?

热门文章

  1. JQuery元素控制方法汇总
  2. xml &amp; &lt; 需要转义
  3. sp_configure命令开启组件Agent XPs,数据库计划(Maintenance Plan)
  4. mac Virtualbox Ubuntu 设置共享目录
  5. mysql 异常 Lock wait timeout exceeded; try restarting transaction;expc=java.sql.SQLExcept
  6. VS2010配置HTML5智能提示
  7. python 包管理和virturlenv
  8. Supervisor安装与配置(非守护进程管理工具)
  9. day23&lt;File类递归练习&gt;
  10. swift - UIProgressView的用法