zoukankan      html  css  js  c++  java
  • 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 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    Oracle数据库(3-7)
    Oracle数据库之PL/SQL程序设计简介
    JAVA总结
    JAVA数据库编程、JAVA XML解析技术
    JAVA网络编程
    【转载】linux启动jmeter,执行./jmeter.sh报错解决方法
    【转载】JMeter学习(十九)JMeter测试MongoDB
    【转载】JMeter学习(二十)JMeter处理Cookie与Session
    【转载】JMeter学习(十八)JMeter测试Java(二)
    【转载】JMeter学习(十七)JMeter测试Java
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7764265.html
Copyright © 2011-2022 走看看