题意

传送门 POJ 2226

题解

每个泥泞地需要被至少一块横着或竖着的板子覆盖,那么预处理出不能覆盖草地的限制下,所有尽可能长的横板子与竖板子。对可覆盖同一块泥泞地的 222 块板子连边,则转化为二分图最小点覆盖问题。

#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 55, maxv = maxn * maxn, maxe = maxv * maxn;
int N, M, fn[maxn][maxn], fm[maxn][maxn];
char fld[maxn][maxn];
int tot, head[maxv], to[maxe], nxt[maxe], match[maxv];
bool vs[maxv];inline void add(int x, int y) { to[++tot] = y, nxt[tot] = head[x], head[x] = tot; }bool dfs(int x)
{for (int i = head[x]; i; i = nxt[i]){int y = to[i], z = match[y];if (vs[y])continue;vs[y] = 1;if (z == -1 || dfs(z)){match[y] = x;return 1;}}return 0;
}int main()
{scanf("%d%d", &N, &M);for (int i = 0; i < N; ++i)scanf("%s", fld + i);int n = 0, m = 0;for (int i = 0; i < N; ++i)for (int j = 0; j < M; ++j)if (fld[i][j] == '*'){fn[i][j] = n;if (j == M - 1 || fld[i][j + 1] == '.')++n;}for (int j = 0; j < M; ++j)for (int i = 0; i < N; ++i)if (fld[i][j] == '*'){fm[i][j] = m;if (i == N - 1 || fld[i + 1][j] == '.')++m;}for (int i = 0; i < N; ++i)for (int j = 0; j < M; ++j)if (fld[i][j] == '*')add(fn[i][j], fm[i][j]);memset(match, -1, sizeof(match));int res = 0;for (int i = 0; i < n; ++i)memset(vs, 0, sizeof(vs)), res += dfs(i);printf("%d\n", res);return 0;
}

POJ 2226 二分图最小点覆盖相关推荐

  1. 二分图最小点覆盖构造方案+König定理证明

    原文链接 前言 博主很笨 ,如有纰漏,欢迎在评论区指出讨论. 二分图的最大匹配使用 DinicDinicDinic 算法进行实现,时间复杂度为 O(ne)O(n\sqrt{e})O(ne​),其中, ...

  2. POJ - 3041 Asteroids 二分图最小点覆盖

    题目链接 二分图一个很重要的定理:看了很多大神的博客表示看不懂为什么,以后再看 最小点覆盖=最大匹配 最小点覆盖就是在二分图里边,选择一个点,将所有与该点相链接的边删去,问最小找多少个点能够把所有的边 ...

  3. hihocoder 1127 : 二分图三·二分图最小点覆盖和最大独立集

    最大独立集问题: 在图G中选取尽可能多的点,使得任意两个点之间没有连边. 结论:最大独立集的点数 = 总点数 - 二分图最大匹配 证明: 假设最大独立集的点数为|U|,二分图最大匹配的匹配数为|M|, ...

  4. hdu 1054 Strategic Game 二分图最小点覆盖

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题意: 给出一个无向图,求最小点覆盖. 思路: 用网络流来做设立一个超级源点和一个超级汇点. 每 ...

  5. 二分图最小点覆盖König定理的简单证明

    König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数.如果你还不知道什么是最小点覆盖,我也在这里说一下:假如选了一个点就相当于覆盖了以它为端点的所有 ...

  6. 【二分图|最小点覆盖集】König定理及其证明

    转自Matrix67 二分图最大匹配的König定理及其证明 如果你看不清楚第二个字母,下面有一个大号字体版本: 二分图最大匹配的König定理及其证明 本文将是这一系列里最短的一篇,因为我只打算把K ...

  7. 图论——二分图——最小点覆盖

    最小点集覆盖 == 最大匹配 一.什么是最小点覆盖 点覆盖的概念定义: 对于图G=(V,E)中的一个点覆盖是一个集合S⊆V使得每一条边至少有一个端点在S中. 最小点覆盖:点个数最少的S集合. 这是我个 ...

  8. POJ - 3041 Asteroids(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目分析:给出一个n*n的矩阵,其中有m个敌人,每一次操作可以清除某一列或某一行中的所有敌人,问若想清除所有敌人,至少需要多少次操作 题目分析:第一次见这种题,就是最小覆盖是要用最 ...

  9. [luogu3231 HNOI2013] 消毒 (二分图最小点覆盖)

    传送门 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc ...

最新文章

  1. OFBiz + Opentaps 仓储设施 基本管理
  2. 选择“Win32汇编”的三大理由?
  3. 图像处理之让手心长出眼睛,其实嘴也可以
  4. SAP同一公司不同工厂间物料转储方案比较
  5. 《糖豆人:终极淘汰赛》:如何打造最难关卡「水涨爬高」
  6. html中th 与thead tbody的 使用
  7. Windows下用CMake编译JsonCpp及配置(适合新手)
  8. VMware桥接模式下主机和和虚机间互相ping不通的处理方法
  9. 物联网安全形势严峻——除严加管控外别无选择
  10. D-News|扎克伯格下月发布人工智能管家,美放宽无人机商用飞行标准
  11. Struts分页的一个实现
  12. 我的Latex中文报告模板
  13. i78750h怎么样
  14. threejs 三面体_three.js几何体对象_三维建模_郭隆邦技术博客
  15. 高粱副产品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. 手机重力感应控制电脑(一)
  17. C语言 实现 最长名字输出
  18. Algorithm Gossip: 最大访客数
  19. 关于使用geoip2获取IP地址的位置
  20. 一周技术学习笔记(第68期)-像练习硬笔书法那样写代码

热门文章

  1. LORA、GFSK、FSK、ASK、OOK无线模块
  2. cygwin中安装g95
  3. Cube.js 试试这个新的数据分析开源工具
  4. 友商s6客户端java_魅蓝s6发布, 给友商再次提供免费的「可抄袭的」交互方案
  5. 调用高德地图展示车辆行驶轨迹
  6. 安卓android BMI体质指数测试项目完整版
  7. 智能家居助手详细设计与实现
  8. 基于Infineon IM564-X6D BLDC变频控制应用方案
  9. QCustomPlot 多个坐标系
  10. ES(elasticSearch学习笔记)