poj 2446 (二分匹配)
2013-09-25 19:25
399 查看
题意;除了所给的一些点外,问能不能用1*2的矩形覆盖所有的点,矩形间不能重叠。
思路:简单二分匹配,,,,,,,
思路:简单二分匹配,,,,,,,
#include<stdio.h> #include<string.h> const int N=1200; int match ,link ,map[35][35],n,m; int dir[4][2]={0,1,0,-1,1,0,-1,0}; int find(int u) { int i,v,x,y,X,Y; x=u/m;y=u%m; for(i=0;i<4;i++) { X=x+dir[i][0]; Y=y+dir[i][1]; if(X<0||X>=n||Y<0||Y>=m||map[X][Y]==1)continue; v=X*m+Y; if(link[v]==0) { link[v]=1; if(match[v]==-1||find(match[v])==1) { match[v]=u;return 1; } } } return 0; } int main() { int i,k,x,y,sum,j; while(scanf("%d%d%d",&n,&m,&k)!=-1) { if((m * n - k) & 1) { printf("NO\n"); continue; } memset(map,0,sizeof(map)); for(i=0;i<k;i++) { scanf("%d%d",&x,&y); x--;y--; map[y][x]=1; } memset(match,-1,sizeof(match)); sum=0; for(i=0;i<n;i++) { for(j=0;j<m;j++) { if((i+j)%2==1||map[i][j])continue; memset(link,0,sizeof(link)); sum+=find(i*m+j); } } if(sum*2+k==n*m) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- poj 2446(二分匹配) Chessboard
- 【POJ】2446 Chessboard 二分匹配
- POJ 2446 二分最大匹配
- POJ 2446 Chessboard (二分匹配)
- Poj 2446 Chessboard 【二分匹配+经典建图模型】
- POJ 2446 Chessboard (二分匹配)
- poj 2446 Chessboard(经典二分匹配)
- Poj-2446 Chessboard 二分匹配
- poj 2446 Chessboard (最大二分匹配)
- poj 2446 Chessboard (二分匹配)
- POJ 2446 Chessboard 二分匹配,藏得太深了
- poj 2446(二分匹配)
- POJ 2446 Chessboard(二分匹配-hungary)
- poj 2584 T-Shirt Gumbo - 二分匹配
- poj 2112 (二分+二分图多重匹配+最短路)
- pku 2446(二分匹配)
- POJ 3041 Asteroids (二分匹配)
- Going Home - poj 2195(最小费用流 | 二分匹配)
- POJ 3041 Asteroids(二分匹配模板题)
- POJ 2446 Chessboard 二分图的最大匹配 <建图>