题目网址:  http://poj.org/problem?id=3020

题意:

用椭圆形去覆盖给出所有环(即图上的小圆点),有两种类型的椭圆形,左右朝向和上下朝向的,一个椭圆形最多可以覆盖相邻的两个小圆点。

 

思路:

将每个小圆点看作是一个顶点,因为一个椭圆只能覆盖两个小圆点,我们就可以把这个图看成一个二分图。将相邻的两个点,一个看作是X集合内顶点,另一个看成是Y集合内顶点。但要注意的是一个顶点可能不止和一个顶点想连(如上图情况),所以我们要把上述情况看作是一个无向图,而不是有向图。因为是无向图,所以最大匹配数要除以二。

这样我们就把问题转换成求最小边覆盖:即用最小的边将所有顶点覆盖。该值会等于 顶点数-最大匹配数。 至于求二分图的最大匹配数,直接用匈牙利算法即可。

代码:

 #include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int match[];
struct node{
int x,y;
}dir[]={{,},{-,},{,},{,-}};
vector<node>v;
int n,m,cnt;
char matrix[][];
int mp[][];
int book[];
int e[][];
void deal(){
for (int x=; x<n; x++) {
for (int y=; y<m; y++) {
if(matrix[x][y]!='*') continue;
int i=mp[x][y];
for (int d=,xx,yy; d<; d++) {
xx=x+dir[d].x;
yy=y+dir[d].y;
if(xx< || x>=n || yy< || yy>=m || matrix[xx][yy]!='*') continue;
int j=mp[xx][yy];
e[i][j]=; }
}
}
}
int dfs(int u){
for(int i=;i<=cnt;i++){
if(!book[i] && e[u][i]){
book[i]=;
if(match[i]== || dfs(match[i])){
match[i]=u;
return ;
}
}
}
return ;
}
int main(){
int t;
scanf("%d",&t);
while (t--) {
int sum=;
cnt=;
v.clear();
memset(match, , sizeof(match));
memset(mp, , sizeof(mp));
memset(e, , sizeof(e));
scanf("%d%d ",&n,&m);
for (int i=; i<n; i++) {
gets(matrix[i]);
for (int j=; j<m; j++) {
if(matrix[i][j]=='*'){
mp[i][j]=++cnt;
}
}
}
deal();
for (int i=; i<=cnt; i++) {
memset(book, , sizeof(book));
if(dfs(i)) sum++;
}
printf("%d\n",cnt-sum/);
}
return ;
}

最新文章

  1. Centos7中systemctl命令详解
  2. sql脚本多服务器操作
  3. CoreData数据库
  4. 【UOJ #20】【NOIP 2014】解方程
  5. 通过lucene的StandardAnalyzer分析器来了解分词
  6. 开发者必须知道的HTML5十五大新特性
  7. IOS6开发环境环境配置
  8. void,extern,sizeof
  9. 实现TextView 文字排版,分散两端对齐
  10. libprotobuff8.so not found
  11. Block 朴实理解
  12. SQL VIEW(视图)
  13. HiHocoder1415 : 后缀数组三&#183;重复旋律3 &amp; Poj2774:Long Long Message
  14. acl.go
  15. 第26月第29天 ffmpeg yasm
  16. websocket:日常总结
  17. VUE CLI 3.0 项目引入 ElementUI
  18. [luogu]P1852跳跳棋
  19. HTTP与TCP的区别和联系--转载
  20. QMYSQL driver not loaded

热门文章

  1. Python实现语音识别和语音合成
  2. cython的安装
  3. NLP舞动之中文分词浅析(一)
  4. airflow的安装
  5. spring注解方式,异常 &#39;sessionFactory&#39; or &#39;hibernateTemplate&#39; is required的解决方法
  6. Centos7 安装Nginx 实战01
  7. linux初学者小记(二)
  8. asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录
  9. Spring MVC 梳理 - 四种HandlerMapping
  10. Spring MVC-从零开始-分拆applicationContext. xrnl