这道题挺像hdu 5093 Battle ships的,不过那道题是要求最多放置的点数,而这道题是要求最小点覆盖。

顶点覆盖的定义是:在G中任意边至少有一个端点属于顶点集合S。

一个重要的位置有(x,y)两个坐标,而要守住这个这个位置就是相当于连了一条边x到y的边。

选了一个(x,y)就相当于选了所有相同的x的边或者所有相同的y的边。

当所有的x或y被选完的时候就完成了看守。相当于是割断了x和y,所以就是最小割,对于容量为1的模型可以用匈牙利算法。

有了障碍以后只要把障碍两边的分开考虑就行了,拆一下点。

数组开大点不要RE啦

#include<bits/stdc++.h>
using namespace std; const int N = ;
const int maxn = ;
char g[maxn][maxn];
int Yid[maxn][maxn],Y_cnt;
int match[N];
int dfsT[N],dfsTime;
vector<int> G[N];
#define PB push_back
bool dfs(int u)
{
for(int i = ; i < G[u].size(); i++){
int v = G[u][i];
if(dfsT[v] != dfsTime){
dfsT[v] = dfsTime;
if(!~match[v] || dfs(match[v])){
match[v] = u; return true;
}
}
}
return false;
} int MaxMatch()
{
int ret = ;
memset(match,-,sizeof(match));
memset(dfsT,,sizeof(dfsT));
dfsTime = ;
for(int i = ; i < Y_cnt; i++){
dfsTime++;
if(dfs(i)) ret++;
}
return ret;
} int main()
{
// freopen("in.txt","r",stdin);
int C; scanf("%d",&C);
while(C--){
int Y, X, P; scanf("%d%d%d",&Y,&X,&P);
memset(g,,sizeof(g)); while(P--) {
int r,c;scanf("%d%d",&r,&c);
g[r][c] = '*';
}
scanf("%d",&P);
while(P--){
int r,c;scanf("%d%d",&r,&c);
g[r][c] = '#';
}
Y_cnt = ;
for(int i = ; i <= Y;i++){
bool flag = false;
for(int j = ; j <= X; j++){
if(g[i][j] == '*') flag = true,Yid[i][j] = Y_cnt;
else if(g[i][j] == '#' && flag) Y_cnt++;
}
if(flag) Y_cnt++;
}
for(int i = ; i < Y_cnt; i++) G[i].clear();
int X_cnt = ;
for(int j = ; j <= X; j++){
bool flag = false;
for(int i = ; i <= Y; i++){
if(g[i][j] == '*') {
flag = true;
G[Yid[i][j]].PB(X_cnt);
}else if(g[i][j] == '#'&&flag){
X_cnt++;
}
}
if(flag) X_cnt++;
}
printf("%d\n",MaxMatch());
}
return ;
}

最新文章

  1. apache 多站点配置
  2. 【学习笔记】Y2-1-1 Oracle数据库基础
  3. soj4271 Love Me, Love My Permutation (DFS)
  4. XAF响应式布局皮肤界面展示
  5. Ubuntu14.04安装和配置Tomcat8.0.12
  6. C# 虚方法 与 隐藏方法(new) 区别
  7. Aisen仿新浪微博客户端项目源码
  8. 关于JavaScript 原型的理解
  9. 使用DBCC CHECKIDENT重置自增标识
  10. uva 10891 Game of Sum(区间dp)
  11. jmeter对http协议中post请求接口测试
  12. 使用for循环还是foreach循环?
  13. oracle 死锁
  14. Chrome 主页被篡改
  15. 加速安装 Sharepoint 2013 SP1
  16. Elasticsearch 安装的时候,Unsupported major.minor version 51.0问题的解决
  17. 使用SLF4J和LOGBACK (一 : 基本使用)
  18. IntelliJ IDEA 注册码及相关资源
  19. hdu-2197 本原串---枚举因子+容斥定理
  20. 0404-服务注册与发现-客户端负载均衡-两种自定义方式-Ribbon通过代码自定义配置、使用配置文件自定义Ribbon Client

热门文章

  1. C - Present
  2. linux中网络编程&lt;1&gt;
  3. TypeScript完全解读(26课时)_16.声明合并
  4. JAVA企业级开发--jsp,el,jstl(14)
  5. Linux whereis 搜索命令位置
  6. ZOJ3175【公式化函数的思想】
  7. linux模拟http请求命令
  8. 50 个加速包都抢不到车票,还不如这个 Python 抢票神器!
  9. day02 多态
  10. 搭建hustoj现场环境