http://poj.org/problem?id=3020

 #include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
char maz[][];
int e[][];
int d[][]={,,,-,,,-,};
int n,m;
vector <int > G[];
bool vis[];
void addedge(int from,int to){
e[from][to]=;
G[from].push_back(to);
}
int dfs(int s){
vis[s]=true;
if(s==n*m+){//printf("dfs %d ok\n",s);
return ;}
for(int i=;i<G[s].size();i++){
if(!vis[G[s][i]]&&e[s][G[s][i]]&&dfs(G[s][i])){
e[s][G[s][i]]=;
e[G[s][i]][s]=;
// printf("dfs %d ok\n",s);
return ;
}
}
//printf("dfs %d failed \n",s);
return ;
}
int maxflow(){
int ans=,f;
while(){
f=dfs(n*m);
memset(vis,,sizeof(vis));
if(f==)break;
ans+=f;
}
return ans;
}
void printe(){
for(int i=;i<m*n+;i++){
bool f=false;
for(int j=;j<m*n+;j++){
if(e[i][j]){printf("e[%d][%d] ",i,j);f=true;}
}
if(f) printf("\n");
}
}
int main(){
int t;
scanf("%d",&t);
while((t--)&&scanf("%d%d",&n,&m)==){
for(int i=;i<=n*n+;i++){G[i].clear();}
memset(e,,sizeof(e)); for(int i=;i<n;i++){
scanf("%s",maz[i]);
}
int ans=;
int star=;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
if(maz[i][j]=='*'){
star++;
if((i+j)&){
addedge(n*m,i*m+j);//n*n s n*n+1 t
// printf("addedge %d %d %d %d:%d to %d\n",n,0,i,j,n*m,i*m+j);
for(int k=;k<;k++){
int nx=i+d[k][];
int ny=j+d[k][];
if(nx>=&&nx<n&&ny>=&&ny<m&&maz[nx][ny]=='*'){
addedge(i*m+j,nx*m+ny);
// printf("addedge %d %d %d %d:%d to %d\n",i,j,nx,ny,i*m+j,nx*m+ny);
}
}
}
else {
addedge(i*m+j,n*m+);
//printf("addedge %d %d %d %d:%d to %d\n",i,j,n,1,i*m+j,n*m+1);
for(int k=;k<;k++){
int nx=i+d[k][];
int ny=j+d[k][];
if(nx>=&&nx<n&&ny>=&&ny<m&&maz[nx][ny]=='*'){
addedge(i*m+j,nx*m+ny);
e[i*m+j][nx*m+ny]=;
// printf("addedge %d %d %d %d:%d to %d\n",i,j,nx,ny,i*m+j,nx*m+ny);
}
}
}
}
}
} ans=maxflow();
printf("%d\n",star-ans);
}
return ;
}

POJ 3020 Antenna Placement 匈牙利算法,最大流解法 难度:1的更多相关文章

  1. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement

    题目传送门 /* 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 */ #include ...

  2. poj 3020 Antenna Placement(最小路径覆盖 + 构图)

    http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

  3. POJ 3020 Antenna Placement 【最小边覆盖】

    传送门:http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total ...

  4. POJ 3020 Antenna Placement(二分图 匈牙利算法)

    题目网址:  http://poj.org/problem?id=3020 题意: 用椭圆形去覆盖给出所有环(即图上的小圆点),有两种类型的椭圆形,左右朝向和上下朝向的,一个椭圆形最多可以覆盖相邻的两 ...

  5. poj 3020 Antenna Placement(二分无向图 匈牙利)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6438   Accepted: 3176 ...

  6. POJ 3020 Antenna Placement【二分匹配——最小路径覆盖】

    链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  7. poj3020 Antenna Placement 匈牙利算法求最小覆盖=最大匹配数(自身对应自身情况下要对半) 小圈圈圈点

    /** 题目:poj3020 Antenna Placement 链接:http://poj.org/problem?id=3020 题意: 给一个由'*'或者'o'组成的n*m大小的图,你可以用一个 ...

  8. POJ 3020——Antenna Placement——————【 最小路径覆盖、奇偶性建图】

    Antenna Placement Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

  9. POJ 3020 Antenna Placement

    Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5645 Accepted: 2825 Des ...

随机推荐

  1. Java中内存中的Heap、Stack与程序运行的关系

    堆和栈的内存管理 栈的内存管理是顺序分配的,而且定长,不存在内存回收问题:而堆 则是随机分配内存,不定长度,存在内存分配和回收的问题:堆内存和栈内存的区别可以用如下的比喻来看出:使用堆内存就象是自己动 ...

  2. wex5 教程 之 图文讲解 全局可观察变量与登陆状态全局控制

    一 先说说,这两个概念是什么意思 全局可观察变量?没听说过,只听过全局变量,那你out了,因为我要充分发挥绑定技术来控制页面部局,组件的隐藏与显示,文字内容,样式改变.看我博文大家知道,我想用绑定技术 ...

  3. libevent源码分析:bufferevent

    struct bufferevent定义在文件bufferevent_struct.h中. /** Shared implementation of a bufferevent. This type ...

  4. min.css----全世界最快的CSS框架

      有一个CSS框架,叫min.css,它号称是全世界最快的. 难怪,它的代码就这一点. 你看它的页面例子,像Bootstrap,但比后者轻多了,它只是一些CSS样式,没有JavaScript代码. ...

  5. html回忆(一)

    1. 解决乱码,告诉浏览器 当前文档类型和编码 <meta http-equiv="Content-Type" content="text/html; charse ...

  6. [问题2014S10] 复旦高等代数II(13级)每周一题(第十教学周)

    [问题2014S10]  设 \(A,B\) 为 \(n\) 阶方阵, 证明: \(AB\) 与 \(BA\) 相似的充分必要条件是 \[\mathrm{rank}\big((AB)^i\big)=\ ...

  7. Bootstrap_标签

    一.标签 在一些Web页面中常常会添加一个标签用来告诉用户一些额外的信息,比如说在导航上添加了一个新导航项,可能就会加一个“new”标签,来告诉用户. 那么在Bootstrap框架中特意将这样的效果提 ...

  8. Scrum Meeting 2-20151202

    任务安排 姓名 今日任务 明日任务 困难 董元财 完成下拉刷新的实现 请假(明天是编译截至最后一天) 无 胡亚坤 完成圆形头像代码设计 请假(明天是编译截至最后一天) 无 刘猛 学习listview的 ...

  9. linux详细redis安装和php中redis扩展

    第一部分:安装redis 希望将redis安装到此目录 1 /usr/local/redis 希望将安装包下载到此目录 1 /usr/local/src 那么安装过程指令如下: 1 2 3 4 5 6 ...

  10. hibernate hibernate.cfg.xml component 组件

    1.为什么使用component组件? 当一个表的列数目比较多时,可以根据属性分类,将一个java对象拆分为几个对象. 数据库还是一张表,不过有多个对象与之对应. 2.实例 2.1 Java 对象: ...