HDU 4185 Oil Skimming(最大匹配)
来源:互联网 发布:美工设计 编辑:程序博客网 时间:2024/05/07 13:36
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4185
题目大意:给定n*n的图,“#”代表an oily cell,"."代表a pure water cell。用尽可能多的木板(1*2的大小)去覆盖“#”,木板要覆盖的只能是“#”,问最多能用几块木板覆盖。
分析:很典型的二分匹配问题,将矩阵中的点分成两种,即把矩阵当成一个黑白棋盘,那么,一个木板只能覆盖一个黑色和一个白色格子,将黑色格子(并且是‘#’的格子)跟相邻的白色(并且是‘#’)的格子连一条边,则变成了一个求最大匹配的问题了。
难点是如何建图,其他的求最大匹配就是模板了。
Code:
#include<stdio.h>#include<algorithm>#include<string.h>#include<iostream>#include<stdlib.h>#include<math.h>#include<queue>#include<map>#include<stack>using namespace std;#define mann 1010#define INF 0x3f3f3f3ftypedef long long LL;int t,n,cnt;char s[mann][mann];int a[mann][mann];int head[mann],link[mann],vis[mann];int dx[4]= {-1,1,0,0};int dy[4]= {0,0,-1,1};struct node{ int to,next;} eg[mann*20];void add(int u,int v){ eg[cnt].to=v; eg[cnt].next=head[u]; head[u]=cnt++;}int dfs(int u){ for(int i=head[u]; i!=-1; i=eg[i].next) { int v=eg[i].to; if(!vis[v]) { vis[v]=1; if(link[v]==-1||dfs(link[v])) { link[v]=u; return true; } } } return false;}int match(int nn){ int ans=0; memset(link,-1,sizeof(link)); for(int i=0;i<nn;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } return ans;}int main(){ int T=0; scanf("%d",&t); while(t--) { memset(head,-1,sizeof(head)); memset(a,0,sizeof(a)); scanf("%d",&n); for(int i=0; i<n; i++) scanf("%s",s[i]); int num=0; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(s[i][j]=='#') { a[i][j]=num++; // printf("%d ",a[i][j]); } } // printf("\n"); } for(int i=0; i<=n; i++) { for(int j=0; j<=n; j++) { if(s[i][j]=='#') { for(int k=0; k<4; k++)//相邻的四个方向 { int xx=i+dx[k]; int yy=j+dy[k]; if(xx>=0&&xx<n&&yy>=0&&yy<n&&s[xx][yy]=='#') { add(a[i][j],a[xx][yy]); add(a[xx][yy],a[i][j]); // printf("%d*%d ",a[i][j],a[xx][yy]); } } } } } int ans=match(num)>>1;//这里要注意 printf("Case %d: %d\n",++T,ans); }}
0 0
- hdu 4185 Oil Skimming(最大匹配)
- HDU 4185 Oil Skimming(最大匹配)
- hdu 4185 Oil Skimming (最大匹配)
- hdu 4185 Oil Skimming(最大匹配)
- hdu 4185 Oil Skimming 【最大匹配】
- hdu 4185 Oil Skimming (最大匹配)
- HDU 4185 Oil Skimming (最大匹配)
- hdu 4185 Oil Skimming(最大匹配)
- hdu 4185Oil Skimming (二分匹配)
- hdu 4185 Oil Skimming (二分匹配)
- hdu 4185 (Oil Skimming) 奇偶匹配
- hdu 4185 Oil Skimming (二分匹配)
- HDU 4185 Oil Skimming(二分图最大匹配)
- HDU 4185 Oil Skimming(二分图最大匹配)
- HDU 4185 Oil Skimming(二分图最大匹配)
- HDU 4185 Oil Skimming ( 二分匹配建图 )
- HDU 4185 Oil Skimming(离散化 + 二分图匹配)
- 【二分匹配】hdu 4185 Oil Skimming
- 【5】.net WCF 简单实例
- 我的2016,被坑的一年,我的2017
- C#移动无标题窗口
- 蓝桥杯 PREV-3 历届试题 带分数
- FZU oj 1759 Super A^B mod C (快速幂+指数循环节+欧拉函数)
- HDU 4185 Oil Skimming(最大匹配)
- SDL应用之三种字库
- 变量声明关键字var、let、const
- servlet实现文件的上传
- 创建自己的开源项目-创建远程代码仓库
- Map的内部类使用介绍
- 1016: [JSOI2008]最小生成树计数
- Android开发中使用开源框架的问题总结
- 6、面向对象的基本概念