题意:

给定m*n的棋盘,有若干只咕咕。希望去掉一部分咕咕使得剩下的咕咕在上下左右四个方向越过咕咕槽的情况下都看不到咕咕。

思路:

建立一个二分图的方法有很多,这里采用xy二分。

假设没有咕咕槽的情况下,咕咕的最大放置数其实有点像八皇后问题,当然这里我们用最大匹配的思路求解。

当一个位置上放置了咕咕,那么其坐标(x,y)便被移除了待选集合,由此可见,如果建立一个X和Y的二分图,那么最大咕咕数就是二分图的最大匹配。

有锅的时候,相比于没有锅的时候难度增加在了怎么建边上,我们仍然想通过编号的方式建边,那么对于每个横向、竖向区域便可以可以用他们最左边\最右边的区域的编号代替,将其建边求最大二分匹配即可。(说见了就是锅的右边行+1,锅的下边列+1)。

//https://blog.csdn.net/sotifish/article/details/48396087
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
const int maxn = 10005;
vector<int> G[maxn];
char s[maxn][maxn];
bool vis[maxn];
int match[maxn];
int n, m; void add_edge(int u, int v) {
G[u].push_back(v);
G[v].push_back(u);
} bool dfs(int u) {
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i];
if (!vis[v]) {
vis[v] = true;
if (match[v] < 0 || dfs(match[v])) {
match[v] = u;
return true;
}
}
}
return false;
} int main()
{
scanf("%d%d", &n, &m);
memset(match, -1, sizeof(match));
for (int i = 0; i < n; i++) {
scanf("%s", s[i]);
}
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (s[i][j] == 'o') {
int x = i, y = j;
while (x > 0 && s[x - 1][j] != '+') x--;
while (y > 0 && s[i][y - 1] != '+') y--;
add_edge(x*m + j, i*m + y + m*n);
if (s[i][j] == 'o')cnt++;
}
}
}
int res = 0, num;
for (int i = 0; i < n*m; i++)
{
memset(vis, false, sizeof(vis));
if (dfs(i)) res++;
}
if (cnt <= res || cnt == 0) num = 0;
else num = cnt - res;
printf("%d\n", num);
return 0;
}

POJ2226(二分图建图/最小点覆盖)的更多相关文章

  1. HDU1150 Machine Schedule(二分图最大匹配、最小点覆盖)

    As we all know, machine scheduling is a very classical problem in computer science and has been stud ...

  2. Antenna Placement POJ - 3020 二分图匹配 匈牙利 拆点建图 最小路径覆盖

    题意:图没什么用  给出一个地图 地图上有 点 一次可以覆盖2个连续 的点( 左右 或者 上下表示连续)问最少几条边可以使得每个点都被覆盖 最小路径覆盖       最小路径覆盖=|G|-最大匹配数 ...

  3. hdu 5294 Tricks Device 最短路建图+最小割

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...

  4. 最大流任务调度——hdu3572二分图建图

    很简单的任务调度模板题 把一个工作完成一天的量当做是边 /* 任务调度问题最大流 因为两个任务之间是没有关系的,两天之间也是没有关系的 所以抽象成二分图 任务i在天数[si,ei]之间都连一条双向边, ...

  5. POJ 3041 Asteroids(二分图 && 匈牙利算法 && 最小点覆盖)

    嗯... 题目链接:http://poj.org/problem?id=3041 这道题的思想比较奇特: 把x坐标.y坐标分别看成是二分图两边的点,如果(x,y)上有行星,则将(x,y)之间连一条边, ...

  6. P5331 [SNOI2019]通信 [线段树优化建图+最小费用最大流]

    这题真让人自闭-我EK费用流已经死了?- (去掉define int long long就过了) 我建的边害死我的 spfa 还是spfa已经死了? 按费用流的套路来 首先呢 把点 \(i\) 拆成两 ...

  7. hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. SPOJ-OPTM Optimal Marks ★★(按位建图 && 最小割)

    [题意]给出一个无向图,每个点有一个标号mark[i],不同点可能有相同的标号.对于一条边(u, v),它的权值定义为mark[u] xor mark[v].现在一些点的标号已定,请决定剩下点的标号, ...

  9. HDU 1045 Fire Net 二分图建图

    HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...

随机推荐

  1. VFP CursorAdapter 起步二(作者:Doug Hennig 译者:fbilo)

    用 CursorAdapter 来取得和更新数据 在 VFP8 中新增的 CursorAdapter 基类提供一个统一.易用的数据接口.Doug Hennig 在这个月的文章中演示了怎样使用 Curs ...

  2. VFP的13个SPT函数

    Visual FoxPro 中内置了13个以SQL开头的函数,我们把它们称为SPT函数.就是这13个函数完成了Visual FoxPro的所有的SQL Pass Though功能.从功能上看,我们可以 ...

  3. vuex知识笔记,及与localStorage和sessionStorage的区别

    菜单快捷导航 Vuex是什么东东,有什么应用场景?localStorage和sessionStorage能否替代它? Vuex知识点State.Getter.Mutaion.Action Vuex模块 ...

  4. POJ 1753 Flip Game 暴力 深搜

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 59468   Accepted: 24750 Descr ...

  5. Linux下通过二进制方式安装mysql5.7版本和系统优化

    本文主要介绍MySQL二进制软件包的安装/启动/关闭过程. 也许有人要问为什么要选择二进制的安装方式呢? 其实答案很简单,官方版本中已经把所有功能都配置好了,我们可以很方便地拿来使用. 官方MySQL ...

  6. spring cloud springboot 框架源码 activiti工作流 前后分离 集成代码生成器

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...

  7. iOS 中事件的响应链和传递链

    iOS事件链有两条:事件的响应链:Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递.initial view –> super view –> ….. –> ...

  8. 第四次oo博客作业

    (1)本单元是撰写UML数据分析器,架构大致如下,在指导书要求的函数外,对于UmlClass类,Umlinterface类,以及状态机,顺序图这四个类重现构造一个类,这个类里有他们所需要的全部信息,另 ...

  9. mysql 主主备份

    1.1.主主备份原理. 主主备份实际上是互为主从,主要是为了去缓解写入压力. 1.2.环境准备 两台机器ip分别为 100.100.100.105 (主1) 100.100.100.106(主2) 安 ...

  10. Mac-App Store 购买过程中出错 请求超时

    打开终端 输入下面命令回车: defaults delete com.apple.appstore.commerce Storefront 接上步骤,继续输入下面命令回车: defaults writ ...