/**
题目:poj3020 Antenna Placement
链接:http://poj.org/problem?id=3020
题意:
给一个由'*'或者'o'组成的n*m大小的图,你可以用一个小圈圈圈住两个相邻的'*',问要圈住所有的'*'最少需要多少个小圈圈。(小圈圈可以相交) 思路:
先尽量圈出能圈两个且不重复圈的'*'。剩下的没有圈的'*'一定需要用一个。
所以构造二分图,求最大匹配,结果:ans = 总的'*'数量-最大匹配数*2 + 最大匹配数 = 总的'*'数量-最大匹配数; 用自身对应自身构造的二分图,求得的最大匹配数要对半才是上面要求的最大匹配数。 */ #include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<cstring>
using namespace std;
const int MAXN = ;///n*m=400
int f[MAXN][MAXN];
int vit[MAXN], S[MAXN], T[MAXN];
int N;
///模板
bool Find(int x)///走交替路,寻找增广路
{
for(int i = ; i <= N; i++){///n表示右侧点数。
if(f[x][i]&&vit[i]==){
vit[i] = ;
if(T[i]==||Find(T[i])){
T[i] = x;///右边第i个点和左边第x个点匹配成功。
S[x] = i;///左边第x个点和右边第i个点匹配成功。
return true;
}
}
}
return false;
}
char str[][];
int main()
{
int n, m, k;
cin>>k;
while(k--){
scanf("%d%d",&n,&m);
N = n*m;
for(int i = ; i <= n; i++){
scanf("%s",str[i]+);
}
memset(f, , sizeof f);
memset(S, , sizeof S);
memset(T, , sizeof T);
int cnt = ;///'*'的个数
for(int i = ; i <= n; i++){
for(int j = ; j <= m; j++){
if(str[i][j]=='*'){
cnt++;
if(j+<=m&&str[i][j+]=='*'){///向右边,和下边找,以免重复。
f[(i-)*m+j+][(i-)*m+j] = f[(i-)*m+j][(i-)*m+j+] = ;///两边都是相同的数据,所以最大匹配数结果是两倍。
///最终要除以2。
}
if(i+<=n&&str[i+][j]=='*'){
f[i*m+j][(i-)*m+j] = f[(i-)*m+j][i*m+j] = ;
}
}
}
}
int ans = ;
for(int i = ; i <= N; i++){
memset(vit, , sizeof vit);
if(Find(i)) ans++;
}
printf("%d\n",cnt-*(ans/)+(ans/));/// cnt - ans/2;
}
return ;
}

poj3020 Antenna Placement 匈牙利算法求最小覆盖=最大匹配数(自身对应自身情况下要对半) 小圈圈圈点的更多相关文章

  1. 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题

    题目: 题目已经说了是最大二分匹配题, 查了一下最大二分匹配题有两种解法, 匈牙利算法和网络流. 看了一下觉得匈牙利算法更好理解, 然后我照着小红书模板打了一遍就过了. 匈牙利算法:先试着把没用过的左 ...

  2. POJ 3020 Antenna Placement 匈牙利算法,最大流解法 难度:1

    http://poj.org/problem?id=3020 #include <cstdio> #include <cstring> #include <vector& ...

  3. POJ3020 Antenna Placement —— 最大匹配 or 最小边覆盖

    题目链接:https://vjudge.net/problem/POJ-3020 Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K ...

  4. POJ3020——Antenna Placement(二分图的最大匹配)

    Antenna Placement DescriptionThe Global Aerial Research Centre has been allotted the task of buildin ...

  5. 匈牙利算法求最大匹配(HDU-4185 Oil Skimming)

    如下图:要求最多可以凑成多少对对象 大佬博客: https://blog.csdn.net/cillyb/article/details/55511666 https://blog.csdn.net/ ...

  6. 【01染色法判断二分匹配+匈牙利算法求最大匹配】HDU The Accomodation of Students

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 [DFS染色] #include<iostream> #include<cstdio&g ...

  7. Hungary(匈牙利算法)——二分图最大匹配

    在复习匈牙利算法的时候,发现这么一篇介绍匈牙利算法的文章,非常通俗易懂,所以就借鉴过来了. 复杂度:邻接矩阵:O(v^3)邻接表:O(V*E) 附上链接:趣写算法系列之--匈牙利算法 下面就附上代码吧 ...

  8. POJ3020 Antenna Placement

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9586   Accepted: 4736 ...

  9. PKU 3020 Antenna Placement(拆点+最小边覆盖)(最大匹配)

    题目大意:原题链接 一个矩形中,有N个城市’*’,现在这n个城市都要覆盖无线,若放置一个基站,那么它至多可以覆盖相邻的两个城市.问至少放置多少个基站才能使得所有的城市都覆盖无线? 提示:看清楚题目,' ...

随机推荐

  1. Maven C盘用户文件下没有.m2

    在配置好Maven的环境之后,先运行一条命令: mvn help:system 该命令会打印出所有的Java系统属性和环境变量. 运行这条命令的目的是让Maven执行一个真正的任务.可以从命令行上看到 ...

  2. centos6.8服务器配置之SVN配置

    version 1.6.11 一.安装:因对版本要求不高,所以采用yum安装 yum install -y svn 二.配置 1.创建仓库,以后所有代码都放在这个下面,创建成功后在svn下面多了几个文 ...

  3. IO/序列化/JSON

    一.读写文件 1.open:打开文件 open(path, mode, encoding='xxx', errors='ignore') mode取值:rU 或 Ua 以读方式打开, 同时提供通用换行 ...

  4. JavaWeb 发送post请求的2种方式(form、json)

      JavaWeb 发送post请求的2种方式(form.json) CreationTime--2018年6月20日10点15分 Author:Marydon 前提:通过HttpClient来实现 ...

  5. java分页功能代码

    import java.util.ArrayList; import java.util.List; /** * * @author cheney * * @date Aug 31, 2012 */ ...

  6. DDCX2018届校招内推笔试——算法工程师

    -------------------------------------------------------------------------[选择题]---------------------- ...

  7. unity3d控制模型的运动

    这里就不多做解释了,直接上代码,只为了备忘. public class HeroMove : MonoBehaviour { private float speed;//人物行动速度 private ...

  8. 1 bootstrap table null默认显示为 - 要查源码 2 记一个很无语的bug

    本来返回的json 3个true 7个false的 结果显示10个true 因为本来是好的 结果判断的问题 给全部赋值true了

  9. unity, UGUI Text outline

    UGUI Text的勾边效果是通过添加component实现的: Add Component->UI->Effects->Outline 参考:http://www.cnblogs. ...

  10. AngularJS ——ngResource、RESTful APIs 使用

    这篇文章里,用以下两个情景用例来解释: 保存/持久化 新的数据对象 更新存在的数据对象 代码片段包含了AngularJs代码和Spring MVC代码,以能够让你简单快速的上手. 想要$resourc ...