zoukankan      html  css  js  c++  java
  • poj 2446 (二分匹配)

    题意;除了所给的一些点外,问能不能用1*2的矩形覆盖所有的点,矩形间不能重叠。

    思路:简单二分匹配,,,,,,,






    #include<stdio.h>
    #include<string.h>
    const int N=1200;
    int match[N],link[N],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
    ");
    			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
    ");
    		else printf("NO
    ");
    	}
    	return 0;
    }
    


  • 相关阅读:
    find
    fdisk
    falcon-eye
    ethtools
    e2fsck
    dpkg
    declare
    df
    debconf-utils
    区块链从零开始做开发(0):hyperledger Fabric2.3安装
  • 原文地址:https://www.cnblogs.com/pangblog/p/3339380.html
Copyright © 2011-2022 走看看