poj2226(最小点覆盖)
传送门:Muddy Fields
题意:一个由r行c列方格组成的田地,里面有若干个方格充满泥泞,其余方格都是草。要用长度不限,宽度为1的长木板来覆盖这些泥方格,但不能覆盖草地。最少要用多少个长木板。
分析:行列模型最小点覆盖,给连续行和列重新标号,然后每个字符*代表一条边,题目转换成用最少点覆盖所有的边(*)。
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-6
#define N 1010
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
int match[N],vis[N],n,m;
int vn,vm,r[N][N],c[N][N];
int g[N][N];
char s[N][N];
int dfs(int u)
{
for(int i=; i<=vm; i++)
{
if(g[u][i]&&!vis[i])
{
vis[i]=;
if(match[i]==-||dfs(match[i]))
{
match[i]=u;
return ;
}
}
}
return ;
}
int hungary()
{
FILL(match,-);
int ans=;
for(int i=; i<=vn; i++)
{
FILL(vis,);
if(dfs(i))ans++;
}
return ans;
}
void build()
{
vn=vm=;FILL(g,);
for(int i=; i<=n; i++)
{
int first=;
for(int j=; j<=m; j++)
{
if(s[i][j]=='*')
{
if(first)vn++;
first=;
r[i][j]=vn;
}
else first=;
}
}
for(int i=;i<=m;i++)
{
int first=;
for(int j=; j<=n; j++)
{
if(s[j][i]=='*')
{
if(first)vm++;
first=;
c[j][i]=vm;
}
else first=;
}
}
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
if(s[i][j]=='*')
{
g[r[i][j]][c[i][j]]=;
}
}
int main()
{
while(scanf("%d%d",&n,&m)>)
{
for(int i=; i<=n; i++)
scanf("%s",s[i]+);
build();
int res=hungary();
printf("%d\n",res);
}
}
poj2226(最小点覆盖)的更多相关文章
- [USACO2005][POJ2226]Muddy Fields(二分图最小点覆盖)
题目:http://poj.org/problem?id=2226 题意:给你一个字符矩阵,每个位置只能有"*"或者“.",连续的横着或者竖的“*"可以用一块木 ...
- POJ2226 Muddy Fields(二分图最小点覆盖集)
题目给张R×C的地图,地图上*表示泥地..表示草地,问最少要几块宽1长任意木板才能盖住所有泥地,木板可以重合但不能盖住草地. 把所有行和列连续的泥地(可以放一块木板铺满的)看作点且行和列连续泥地分别作 ...
- ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)
//匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring&g ...
- 【POJ 3041】Asteroids (最小点覆盖)
每次选择清除一行或者一列上的小行星.最少选择几次. 将行和列抽象成点,第i行为节点i+n,第j列为节点j,每个行星则是一条边,连接了所在的行列. 于是问题转化成最小点覆盖.二分图的最小点覆盖==最大匹 ...
- POJ 2226 最小点覆盖(经典建图)
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8881 Accepted: 3300 Desc ...
- nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...
- POJ3041Asteroids(最小点覆盖+有点小抽象)
Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18289 Accepted: 9968 Descri ...
- hdu 1054 最小点覆盖
Sample Input 4 0:(1) 1 1:(2) 2 3 2:(0) 3:(0) 5 3:(3) 1 4 2 1:(1) 0 2:(0) 0:(0) 4:(0) Sample Output ...
- POJ1325 Machine Schedule(二分图最小点覆盖集)
最小点覆盖集就是在一个有向图中选出最少的点集,使其覆盖所有的边. 二分图最小点覆盖集=二分图最大匹配(二分图最大边独立集) 这题A机器的n种模式作为X部的点,B机器的m种模式作为Y部的点: 每个任务就 ...
随机推荐
- boost之program_options库,解析命令行参数、读取配置文件
一.命令行解析 tprogram_options解析命令行参数示例代码: #include <iostream> using namespace std; #include <boo ...
- 免解压版的Mysql的启动脚本,并且执行导入(windows)
@echo off rem ################### set MYSQL_VERSION=mysql-5.5.32-win32 set LOCK=wot.lock rem ####### ...
- Determine whether an integer is a palindrome. Do this without extra space.
看到这个题目的时候,首先不认识 Determine这个单词.英文不好没办法,查了下是确认的意思,然后不懂 palindrome这个单词, 查了下是回文的意思. 问题是 回文是个什么东西,官方解释: A ...
- CSDN-Code平台使用过程中的5点经验教训
昨天又创建了一个项目,fucms,可是本地一直没有权限提交,搞了非常久,试了几十次,都不行,我是非常的灰心和郁闷. 刚刚,和CSDN-Code的官方客服咨询了非常久非常久,最终摸索出来了一些心得体会 ...
- C#2.0--集合--转载车老师
集合在编程的过程中用的是非常的多,如GridViewRowCollection.ConnectionStringSettingsCollection.NameValueCollection等等.一般来 ...
- PHP开发经验中介(thinkphp3.2使用技巧)
1.在模板中截取字符串 {$vo.create_date|mb_substr=###,0,10,'utf-8'}
- Inverse Quadratic Interpolation (website)
Inverse Quadratic Interpolation: https://www.youtube.com/watch?v=0H7mVPTLF7Q : https://www.youtube. ...
- 网页 HTML
HTML--超文本标记语言Hyper Text Markup Language. 一,常规标签 (1)格式控制(记忆模型--Word工具栏) <b></b>加粗,<i&g ...
- Android switch 中 case expressions must be constant expressions 错误
刚才导入android zxing 条码 的demo测试,发现出现如下错误 case expressions must be constant expressions 经检查,项目被设置成librar ...
- Scanner类及正则表达式
import java.util.Scanner; public class ScannerToString { public static void main(String[] args) { Sc ...