二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement
/*
题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个
匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std; const int MAXN = 4e2 + ;
const int INF = 0x3f3f3f3f;
char s[][];
int ha[][];
bool vis[MAXN];
int lk[MAXN];
vector<int> G[MAXN];
int dx[] = {-, , , };
int dy[] = {, , -, };
int un, vn; bool DFS(int u)
{
for (int i=; i<G[u].size (); ++i)
{
int v = G[u][i];
if (!vis[v])
{
vis[v] = true;
if (lk[v] == - || DFS (lk[v]))
{
lk[v] = u; return true;
}
}
} return false;
} int hungary(void)
{
int res = ; memset (lk, -, sizeof (lk));
for (int i=; i<=un; ++i)
{
memset (vis, false, sizeof (vis));
if (DFS (i)) res++;
} return res;
} int main(void) //POJ 3020 Antenna Placement
{
//freopen ("POJ_3020.in", "r", stdin); int t; scanf ("%d", &t);
while (t--)
{
int h, w; scanf ("%d%d", &h, &w);
for (int i=; i<=h; ++i)
{
scanf ("%s", s[i] + );
} un = vn = ;
for (int i=; i<=h; ++i)
{
for (int j=; j<=w; ++j)
{
if (s[i][j] == '*')
{
if ((i+j) & ) ha[i][j] = ++un;
else ha[i][j] = ++vn;
}
}
} for (int i=; i<=un; ++i) G[i].clear (); for (int i=; i<=h; ++i)
{
for (int j=; j<=w; ++j)
{
if (s[i][j] == '*' && (i+j) & )
{
for (int k=; k<; ++k)
{
int tx = i + dx[k]; int ty = j + dy[k];
if (tx >= && tx <= h && ty >= && ty <= w && s[tx][ty] == '*')
G[ha[i][j]].push_back (ha[tx][ty]);
}
}
}
} printf ("%d\n", un + vn - hungary ());
} return ;
}
二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement的更多相关文章
- 二分图最大匹配(匈牙利算法) POJ 3041 Asteroids
题目传送门 /* 题意:每次能消灭一行或一列的障碍物,要求最少的次数. 匈牙利算法:把行和列看做两个集合,当有障碍物连接时连一条边,问题转换为最小点覆盖数==二分图最大匹配数 趣味入门:http:// ...
- poj 3020 Antenna Placement(最小路径覆盖 + 构图)
http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- POJ 3020 Antenna Placement 【最小边覆盖】
传送门:http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ 3020 Antenna Placement(二分图 匈牙利算法)
题目网址: http://poj.org/problem?id=3020 题意: 用椭圆形去覆盖给出所有环(即图上的小圆点),有两种类型的椭圆形,左右朝向和上下朝向的,一个椭圆形最多可以覆盖相邻的两 ...
- poj - 3041 Asteroids (二分图最大匹配+匈牙利算法)
http://poj.org/problem?id=3041 在n*n的网格中有K颗小行星,小行星i的位置是(Ri,Ci),现在有一个强有力的武器能够用一发光速将一整行或一整列的小行星轰为灰烬,想要利 ...
- poj 3020 Antenna Placement(二分无向图 匈牙利)
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6438 Accepted: 3176 ...
- POJ 3020 Antenna Placement 最大匹配
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6445 Accepted: 3182 ...
- poj 3894 System Engineer (二分图最大匹配--匈牙利算法)
System Engineer Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 507 Accepted: 217 Des ...
- POJ 3020 Antenna Placement【二分匹配——最小路径覆盖】
链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
随机推荐
- MT6753 使用nt35596s 由于液晶极化出现的闪屏问题解决思路
咨询屏厂那边FAE , 若是液晶极化相关的问题,下面三种场景下比较容易复现现象,请协助在目前的故障机上做压力测试: 1.反复开关机(1000次), 2.按power键休眠和唤醒(1000次), 3.反 ...
- 交互设计:隐藏或显示大段文本的UI组件有哪些?
应用场景: 在手机上要给列表中的每一项添加一个大段的介绍,应该用什么UI组件 A: 这里可以用,模态对话框,弹出提示,工具提示这类组件.模态对话框的好处,就是用关闭的按钮,用户操作方便:而弹出提示和工 ...
- springmvc json 数据
这里是controllor层 @RequestMapping("/traceupdatestatus") @ResponseBody public boolean traceupd ...
- 一个简单的Java文件工具类
package com.xyworkroom.ntko.util; import java.io.File; import java.io.FileInputStream; import java.i ...
- 【转】学习JavaScript闭包
原文: http://www.cnblogs.com/Lau7/p/7942100.html#undefined ------------------------------------------- ...
- [React] Spread Component Props in JSX with React
You often find duplication between the name of a prop and a variable you will assign to the prop. JS ...
- Mac使用技巧之Finder的个人收藏
当使Finder的时候,左側会列出来个人收藏,能够非常方便的打开对应的文件夹.那么怎样把自己新建的文件夹也增加到个人收藏呢? 1.默认的个人收藏 2.新建名字为my_ios_demo文件夹,拖动这个文 ...
- C#如何给Listbox添加右键菜单
1 拖一个ContextMenuStrip控件,然后可以直接在界面上编辑,也可以在FormLoad的时候动态添加 2 把这两个控件关联起来就可以实现listBox1的右键菜单跟ContextMenuS ...
- Cracking the Coding Interview 150题(二)
3.栈与队列 3.1 描述如何只用一个数组来实现三个栈. 3.2 请设计一个栈,除pop与push方法,还支持min方法,可返回栈元素中的最小值.pop.push和min三个方法的时间复杂度必须为O( ...
- jq 常用手册
1.替换标签 $("img[src='/_layouts/images/lstbulet.gif']").attr("src", "/huadong/ ...