【wikioi】1022 覆盖(匈牙利)

http://www.wikioi.com/problem/1022/

好不容易来一次1A,,水题啊。。

染色后裸匈牙利orz

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define read(a) a=getnum()
#define print(a) printf("%d", a)
inline int getnum() { int ret=0; char c; for(c=getchar(); c<'0' || c>'9'; c=getchar()); for(; c>='0' && c<='9'; c=getchar()) ret=ret*10+c-'0'; return ret; }

const int N=10005;
int n, m, a[105][105], imap[105][105], cnt;
int ihead[N], inext[N*4], to[N*4];
bool visy[N];
int ly[N], x[N], cntx;
inline void add(const int &u, const int &v) {
	inext[++cnt]=ihead[u]; ihead[u]=cnt; to[cnt]=v;
}

bool ifind(const int &u) {
	int v;
	for(int i=ihead[u]; i; i=inext[i]) if(!visy[v=to[i]]) {
		visy[v]=true;
		if(!ly[v] || ifind(ly[v])) {
			ly[v]=u;
			return true;
		}
	}
	return false;
}

int main() {
	read(n); read(m);
	int k=getnum();
	for1(i, 1, k) a[getnum()][getnum()]=1;
	int last;
	int u;
	for1(i, 1, n) {
		last=i;
		for1(j, 1, m) {
			if(!a[i][j] && (last%2))  {
				u=(i-1)*m+j;
				if(i>1 && !a[i-1][j]) add(u, u-m);
				if(i<n && !a[i+1][j]) add(u, u+m);
				if(j>1 && !a[i][j-1]) add(u, u-1);
				if(j<m && !a[i][j+1]) add(u, u+1);
				x[++cntx]=u;
			}
			++last;
		}
	}
	int ans=0;
	for1(i, 1, cntx) {
		CC(visy, 0);
		if(ifind(x[i])) ++ans;
	}
	print(ans);
	return 0;
}

 

 


 

 

题目描述 Description

有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地。如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积。

 

输入描述 Input Description

输入文件的第一行是两个整数N,M  (1<=N,M<=100),第二行为一个整数K( K<=50),接下来的K行,每行两个整数X,Y表示K个水塘的行列位置。(1<=X<=N,1<=Y<=M)。

 

输出描述 Output Description

输出所覆盖的最大面积块(1×2面积算一块)。

样例输入 Sample Input

4 4

6

1 1

1 4

2 2

4 1

4 2

4 4

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

见描述

 

你可能感兴趣的:(IO)