BZOJ-4808: 马 (二分图最大独立集 WAing~)

Posted 可惜没如果=_=

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ-4808: 马 (二分图最大独立集 WAing~)相关的知识,希望对你有一定的参考价值。

4808: 马

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 425  Solved: 149
[Submit][Status][Discuss]

Description

众所周知,马后炮是中国象棋中很厉害的一招必杀技。"马走日字"。本来,如果在要去的方向有别的棋子挡住(俗
称"蹩马腿"),则不允许走过去。为了简化问题,我们不考虑这一点。马跟马显然不能在一起打起来,于是rly在
一天再次借来了许多许多的马在棋盘上摆了起来……但这次,他实在没兴趣算方案数了,所以他只想知道在N×M的
矩形方格中摆马使其互不吃到的情况下的最多个数。但是,有一个很不幸的消息,rly由于玩得太Happy,质量本来
就不好的棋盘被rly弄坏了,不过幸好只是破了其中的一些格子(即不能再放子了),问题还是可以继续解决的。

 

Input

一行,两个正整数N和M。
接下来N行,每行M个数,要么为0,表示没坏,要么为1,表示坏了。
N<=200,M<=200

 

Output

一行,输出最多的个数。

 

Sample Input

2 3
0 1 0
0 1 0

Sample Output

2

HINT

 

Source

继续WA _(:зゝ∠)_
 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 typedef long long LL;
 4 const int MAX=1005;
 5 int n,m,a[MAX][MAX],id[MAX][MAX],b[MAX][MAX],tx,ans;
 6 int fa[MAX*MAX];
 7 bool vis[MAX*MAX];
 8 int dx[8]={-2,-1,1,2,2,1,-1,-2};
 9 int dy[8]={1,2,2,1,-1,-2,-2,-1};
10 int dfs(int x){
11     int i,j;
12     for (i=1;i<=tx;i++)
13         if (!vis[i] && b[x][i]){
14             vis[i]=true;
15             if (fa[i]==-1 || dfs(fa[i]))
16                 return fa[i]=x,1;
17         }
18     return 0;
19 }
20 int main(){
21     freopen ("horse.in","r",stdin);freopen ("horse.out","w",stdout);
22     int i,j,k,x,y;
23     scanf("%d%d",&n,&m);
24     for (i=1;i<=n;i++)
25         for (j=1;j<=m;j++)
26             scanf("%d",&a[i][j]),id[i][j]=a[i][j]==0?++tx:0;
27     for (i=1;i<=n;i++)
28         for (j=1;j<=m;j++)
29             if (!a[i][j])
30                 for (k=0;k<8;k++){
31                     x=i+dx[k],y=j+dy[k];
32                     if (x<1 || x>n || y<1 || y>m || a[x][y]) continue;
33                     b[ id[i][j] ][ id[x][y] ]=1;
34                 }
35     memset(fa,-1,sizeof(fa));
36     int zt=0;
37     for (i=1;i<=tx;i++){
38         memset(vis,false,sizeof(vis));
39         zt+=dfs(i);
40     }
41     printf("%d",tx-zt/2);
42     return 0;
43 }

 

以上是关于BZOJ-4808: 马 (二分图最大独立集 WAing~)的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 4808 二分图最大独立集

[BZOJ4808] 马(最大独立集,最大流)

bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 (黑白染色+最小割)

洛谷P2774 方格取数问题 BZOJ 1143祭祀river二分图最大独立集

BZOJ4808: 马&BZOJ3175: [Tjoi2013]攻击装置

hihocoder1127 二分图三·二分图最小点覆盖和最大独立集