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. android stutio 快捷键

    [F] [F] F2 在错误代码之间切换 F3 往前定位(Shift + F3:往后定位 )有问题 F4\Ctrl+鼠标点击\Ctrl+B 转到定义,查看类继承关系 F5 但不调试进入函数内部. F6 ...

  2. 关于Navigation的BarButtonItem的

    (ios6.1)有两个controller在navigation stack里,A和B.A是B的previous view controller,现在top-level controller是B.要自 ...

  3. Ninject简介

    1.为什么要用Ninject? Ninject是一个IOC容器用来解决程序中组件的耦合问题,它的目的在于做到最少配置.其他的的IOC工具过于依赖配置文件,需要使用assembly-qualified名 ...

  4. wex5 教程 之 图文讲解 后台管理界面设计与技巧

    视频教程地址:http://v.youku.com/v_show/id_XMTgwOTAyMTkyMA==.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0 ...

  5. 关于ORACLE隐式转换后性能问题

    SELECT TM.MONEY_CODE FROM T_CONTRACT_MASTER T,T_MONEY TM WHERE T.MONEY_ID = TM.MONEY_ID AND T.POLICY ...

  6. 预编译命令 #if DEBUG

    在控制台程序根据预编译命令: http://www.askapache.com/windows/advanced-batch-scripting.html namespace SXGYCarTrans ...

  7. 如何使用Python调用AutoIt来实现Flash控件的上传功能

    先看一段代码 upload.au3(这个后缀autoit3的格式): ;等待出现title为数据采集-军课网-MozillaFirefox的浏览器窗口 WinWait("数据采集 - XX网 ...

  8. storm配置项目

    java.library.path: “/usr/local/lib:/opt/local/lib:/usr/lib”### storm.* configs are general configura ...

  9. iOS 使用Touch ID 校验[新增 iOS9 三种错误]

    iOS8后苹果开放了Touch ID的API给开发者,这也给我们的app带来了新的体验.开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证或支付购 ...

  10. ZooKeeper 编程(一)

    Zookeeper的节点都是存放在内存中的,所以读写速度很快.更新日志被记录到了磁盘中,以便用于恢复数据.在更新内在中节点数之前,会先序列化到磁盘中. 为避免单点失效,zookeeper的数据是在多个 ...