define     n    the number of  ' * '

define     d    the number of couple of two points

define     s    the single point that can't link to others ( means no points around it in 4 directions )

n = 2 * d + s ;

d + s = n - d

use Hungary finding out the d

 #include <stdio.h>
#include <string.h>
char gird[][];
int number[][];
int graph[][];
int in[];
int already[];
int cnt; struct node{
int x,y;
}p[];
int dir[][]={ ,,,-,-,,,}; int find(int a){
int i;
for(i=;i<cnt;++i){
if( graph[a][i]== && in[i]== ){
in[i]=;
if( already[i]==- || find( already[i] )){
already[i]=a;
return ;
}
}
}
return ;
} int main(){
int t;
int n,m,i,j;
int tx,ty,tnum;
int res;
while(~scanf("%d",&t)){
while(t--){
res=;
cnt=;
memset(in,,sizeof(in));
memset(graph,,sizeof(graph));
for(i=;i<;++i) already[i]=-;
scanf("%d%d",&n,&m);
for(i=;i<n;++i){
scanf("%s",gird[i]);
for(j=;j<m;++j)
if(gird[i][j]=='*'){
number[i][j]=cnt;
p[cnt].x=i;
p[cnt].y=j;
cnt++;
}
}
for(i=;i<cnt;++i){
for(j=;j<;++j){
tx=p[i].x+dir[j][];
ty=p[i].y+dir[j][];
if((!(tx>=&&tx<n&&ty>=&&ty<m))||gird[tx][ty]!='*') continue;
tnum=number[tx][ty];
graph[i][tnum]=;
}
}
for(i=;i<cnt;++i){
memset(in,,sizeof(in));
if(find(i)==)
res++;
}
printf("%d\n",cnt-res/);
}
}
return ;
}

poj3020的更多相关文章

  1. 【poj3020】 Antenna Placement

    http://poj.org/problem?id=3020 (题目链接) 题意 给出一个矩阵,矩阵中只有‘*’和‘o’两种字符,每个‘*’可以向它上下左右四个方位上同为‘*’的点连一条边,求最少需要 ...

  2. POJ3020——Antenna Placement(二分图的最大匹配)

    Antenna Placement DescriptionThe Global Aerial Research Centre has been allotted the task of buildin ...

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

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

  4. POJ-3020 Antenna Placement---二分图匹配&最小路径覆盖&建图

    题目链接: https://vjudge.net/problem/POJ-3020 题目大意: 一个n*m的方阵 一个雷达可覆盖两个*,一个*可与四周的一个*被覆盖,一个*可被多个雷达覆盖问至少需要多 ...

  5. POJ3020 Antenna Placement —— 最大匹配 or 最小边覆盖

    题目链接:https://vjudge.net/problem/POJ-3020 Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K ...

  6. 二分图之最小边覆盖(poj3020)

    题目:poj3020 题意:给出一个图,让你用最少的1*2的纸片覆盖掉图中的全部*出现过的地方. 基本裸的最小边覆盖. 分析: 最小边覆盖 = 点总数 - 最大匹配 所以就是转化为求最大匹配. 跟前面 ...

  7. POJ3020 匹配

    题目大意:给定一地图,*可以和相邻的*匹配成一对儿,问最少需要对儿匹配才能使所有*都被匹配到. 很直白的最小点覆盖,即ans = 点集数-最大匹配数. 不过一开始要对图进行遍历得到点集,找到一个*就把 ...

  8. hdu4185+poj3020(最大匹配+最小边覆盖)

    传送门:hdu4185 Oil Skimming 题意:n*n的方格里有字符*和#,只能在字符#上放1*2的板子且不能相交,求最多能放多少个. 分析:直接给#字符编号,然后相邻的可以匹配,建边后无向图 ...

  9. poj3020二分图匹配

    The Global Aerial Research Centre has been allotted the task of building the fifth generation of mob ...

随机推荐

  1. bug_ _ android.view.InflateException: Binary XML file line #2: Error inflating class <unknown

    ========= 5.0     android异常“android.view.InflateException: Binary XML file line # : Error inflating ...

  2. C#2

    同名的两个类如果在不同的命名空间中,相互之间是不会混淆的. 一个名为TextHello的命名空间中创建一个名为Program的类,引用方法 TextHello.Program 我们常用的Console ...

  3. 子iframe 怎么调用 父级的JS函数

    window.parent.父级函数名();

  4. python 正则表达式 demo

    1.匹配大小写和数字,并且大小写数字均要有,且字符串长度为6~20位 ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{6,20}$ import repattern ...

  5. Ubuntu配置网络命令(转载)

    From:http://blog.csdn.net/ithomer/article/details/6264881 以eth0为例   1. 以DHCP方式配置网卡 编辑文件: /etc/networ ...

  6. ConcurrentHashMap使用要点

    ConcurrentHashMap的简要总结: 1.public V get(Object key)不涉及到锁,也就是说获得对象时没有使用锁: 2.put.remove方法要使用锁,但并不一定有锁争用 ...

  7. python第一个hello world注意问题!!

    如果你第一次写python代码,想写一个通常的hello world ,那么你需要注意这个hello world的写法,这和python的版本有直接关系!!! Python 3.x: print('h ...

  8. 证据对抗、证据链标准 z

    证据链乃诉讼中应对证据冲突的法宝   大部分当事人知道“证据链”这一诉讼专用术语,但几乎所有当事人将“证据链”理解成了人证.书证.物证,鉴定结论等证据的组合,将“证据链”视为不同种类证据依次出击的“组 ...

  9. 如何用js来判断浏览器类型(ie,firefox)等等

    现在网络上的浏览器,操作系统就象中国的方言一样,那个叫多啊!这给我们这些开发人员 带来了巨大的痛苦!虽然可能大家的喜好不同!用的系统也不同!有人喜欢用ie,有人喜欢用 firefox,还有人喜欢用腾讯 ...

  10. [Flex] Accordion系列-Header的运用

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...