hdu 1507 Uncle Tom's Inherited Land* 【黑白染色+奇偶匹配(1X2的矩形覆盖)】
2013-08-28 20:30
330 查看
题目:Uncle Tom's Inherited Land*
题意:有一个矩阵,被分成很多小方格。有些小方格有障碍,问最多能在矩阵中
放多少1*2的矩形。
分析:黑白染色+奇偶匹配。
把格子染成国际象棋棋盘那种黑白相间。这样就能再矩阵中找出两个不相交的
点集进行二分匹配。把坐标(i,j)按照(i+j)的奇偶分类。每个格子只能与周围四个
不同颜色的匹配。这里BFS一下。然后二分匹配。
代码:
感想:
[b]今天写的程序全部都WA了。。。终于有个AC了。。。。我真是涕泗横流啊。。。。
题意:有一个矩阵,被分成很多小方格。有些小方格有障碍,问最多能在矩阵中
放多少1*2的矩形。
分析:黑白染色+奇偶匹配。
把格子染成国际象棋棋盘那种黑白相间。这样就能再矩阵中找出两个不相交的
点集进行二分匹配。把坐标(i,j)按照(i+j)的奇偶分类。每个格子只能与周围四个
不同颜色的匹配。这里BFS一下。然后二分匹配。
代码:
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int g[105][105]; int match[105][105]; int vis[105][105]; int dx[4]={-1,1,0,0}; int dy[4]={0,0,-1,1}; int n,m; int f(int i,int j) { return (i-1)*m+j-1; } bool dfs(int u) { int x=u/m+1,y=u%m+1; for(int i=0;i<4;i++) { int xx=x+dx[i]; int yy=y+dy[i]; if(vis[xx][yy] || g[xx][yy]) continue; vis[xx][yy]=1; if(match[xx][yy]==-1 || dfs(match[xx][yy])) { match[xx][yy]=u; return true; } } return false; } int get_max_match() { int i,j; int cnt=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if((i+j)%2 && g[i][j]==0) { memset(vis,0,sizeof(vis)); if(dfs(f(i,j))) cnt++; } } } return cnt; } int main() { int k,i,j,a,b,ans; while(scanf("%d%d",&n,&m)&&n&&m) { scanf("%d",&k); memset(g,0,sizeof(g)); memset(match,-1,sizeof(match)); for(i=1;i<=k;i++) { scanf("%d%d",&a,&b); g[a]=1; } for(i=0;i<=n+1;i++) //边界处理成不能走 { //便于bfs时判断 g[i][m+1]=1; g[i][0]=1; } for(i=0;i<=m+1;i++) { g[0][i]=1; g[n+1][i]=1; } ans=get_max_match(); printf("%d\n",ans); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(match[i][j]!=-1) printf("(%d,%d)--(%d,%d)\n",i,j,match[i][j]/m+1,match[i][j]%m+1); } } } return 0; }
感想:
[b]今天写的程序全部都WA了。。。终于有个AC了。。。。我真是涕泗横流啊。。。。
相关文章推荐
- HDU 1507 Uncle Tom's Inherited Land*(行列匹配||棋盘覆盖||黑白染色||奇偶匹配(1X2的矩形覆盖))
- 1507 Uncle Tom's Inherited Land* 二分图-----黑白染色+奇偶匹配(1X2的矩形覆盖)
- HDU4185Oil Skimming(行列匹配||棋盘匹配||黑白染色||1X2矩形覆盖)
- hdu 1507 Uncle Tom's Inherited Land*(二分图最大匹配,黑白染色)
- HDU 3360 National Treasures 奇偶匹配最小点覆盖
- HDU 3360 National Treasures 奇偶匹配的最低点覆盖
- poj 2446 二分图最大匹配(奇偶图)网上貌似叫(黑白染色图)
- HDU 4185 Oil Skimming 【离散化二分匹配 黑白染色】
- hdu 3360 National Treasures(最小顶点覆盖,黑白染色)
- HDU 3360-National Treasures(最小点覆盖+奇偶匹配)
- hdu 1507 Uncle Tom's Inherited Land* 黑白棋盘 二分匹配
- HDU 2444 黑白染色判二分图+二分最大匹配
- HDU 1507 Uncle Tom's Inherited Land(黑白棋盘最大匹配)
- 杭电 hdu 1507 Uncle Tom's Inherited Land*(二分图,最大匹配)
- HDU 3861--The King’s Problem【scc缩点构图 && 二分匹配求最小路径覆盖】
- HDU 2063 过山车(匈牙利算法 二分图的最小顶点覆盖 二分图最大匹配)
- POJ 2444 The Accomodation of Students 黑白染色+二分匹配 簡單題
- hdu 1150 Machine Schedule 最小顶点覆盖(最大匹配)
- hdu 1255 覆盖的面积(矩形面积并,多次覆盖)
- hdu 1507 Uncle Tom's Inherited Land*(奇偶建图+最大匹配)