http://www.lydsy.com/JudgeOnline/problem.php?id=4808

题意:

思路:

这图中的两个马只能选一个,二选一,很像二分图吧,对能互吃的两个棋子连线,在所选的任意两个棋子中,都不能互相有连线,这不就是最大点独立集吗?

最大独立集 = 顶点个数 - 最大匹配。记得把坏了的格子去掉。

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int n,m,tot;
int mp[][], head[], mark[];
bool vis[]; struct node
{
int v,next;
}e[*]; int dx[] = {-,-,-,-,,,,};
int dy[] = {,-,,-,,-,,-}; void addEdge(int u, int v)
{
e[tot].v = v;
e[tot].next = head[u];
head[u] = tot++;
} bool match(int u)
{
for(int i=head[u];i!=-;i=e[i].next)
{
int v = e[i].v;
if(!vis[v])
{
vis[v] = true;
if(mark[v]==- || match(mark[v]))
{
mark[v] = u;
return true;
}
}
}
return false;
} int main()
{
//freopen("in.txt","r",stdin);
int num = ;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&mp[i][j]);
if(mp[i][j]) num++;
}
tot = ;
memset(head,-,sizeof(head));
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(!mp[i][j])
{
for(int k=;k<;k++)
{
int x = i+dx[k];
int y = j+dy[k];
if(x< || x>n || y< || y>m) continue;
if(mp[x][y]==) continue;
int p1 = (i-)*m+j;
int p2 = (x-)*m+y;
addEdge(p1,p2);
}
}
}
int sum = ;
memset(mark,-,sizeof(mark));
for(int i=;i<=n*m;i++)
{
memset(vis,false,sizeof(vis));
if(match(i)) sum++;
}
printf("%d\n",n*m-num-sum/);
return ;
}

BZOJ 4808: 马(二分图最大点独立集)的更多相关文章

  1. BZOJ 4808 马 二分图最大独立集

    题目应该就是最大独立集了吧,没什么了,平面图求最大独立集需要/2的, WQH说加直接+双向边考研过,结果真的过了,应该是匈牙利算法寻找的 时候更加快了吧.(方便找边) #include<cstd ...

  2. BZOJ 1143: [CTSC2008]祭祀river(二分图最大点独立集)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1143 题意: 思路: 二分图最大点独立集,首先用floyd判断一下可达情况. #include< ...

  3. LightOJ1171 Knights in Chessboard (II)(二分图最大点独立集)

    题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1171 Description Given an m x n ches ...

  4. POJ1466 Girls and Boys(二分图最大点独立集)

    最大点独立集就是无向图中最多的两两不相邻的点集. 二分图最大点独立集=顶点数-二分图最大边独立集(二分图最大匹配) 这一题男女分别作YX部,如果x和y有浪漫关系则连边,如此构造二分图,答案显然就是最大 ...

  5. 【bzoj4808】【马】二分图最大点独立集+简单感性证明

    (上不了p站我要死了,侵权度娘背锅) Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩 ...

  6. POJ 2771 Guardian of Decency (二分图最大点独立集)

    Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6133   Accepted: 25 ...

  7. 解题:BZOJ 4808 马

    题面 以前写过的题,翻出来学习网络流写二分图匹配,因为复杂度更优秀,$Dinic$是$O(sqrt(n)m)$哒~ 原点向左部点连流量为$1$的边,左部点向对应右部点连流量为$1$的边,右部点向汇点连 ...

  8. bzoj 4808: 马【匈牙利算法】

    网格图黑白染色,然后能互相攻击到的点之间连边,跑匈牙利算法最大匹配,答案是好点个数-最大匹配(最大独立集) 注意pao的时候只从一种颜色的格子统计即可 #include<iostream> ...

  9. HDU--3829--Cat VS Dog【最大点独立集】

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题意:动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些 ...

随机推荐

  1. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

    elasticsearch安装时遇到的错误 问题翻译过来就是:elasticsearch用户拥有的可创建文件描述的权限太低,至少需要65536: 解决办法: #切换到root用户修改 vim /etc ...

  2. maven 入门 (一)

    纠结了好久,到底要不要写一份maven入门的所谓“教程”,有好几次想写一下,但是都放弃了,因为网上的太多了,而且都很好,但是现在决定了,还是要写出来,因为者有我自己的理解.所以我想写一份教程出来. 首 ...

  3. LINUX安装REDIS集群

    linux安装单机版redis已经在另一篇文章说过了,下边来搞集群,环境是新浪云服务器: redis3.0以后开始支持集群. 前言:redis用什么做集群? 用一个叫redis-trib.rb的rub ...

  4. SQL数据同步之发布订阅

    发布订阅份为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅.发布可以发布一张表的部分数据,也可以对整张表进行发布.下面分别 ...

  5. 学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  6. ubuntu 常见命令整理

    SSH 查看ssh服务的进程是否已经开启ps -e | grep ssh 安装ssh服务组件sudo apt-get install openssh-server 服务启动和关闭 方法1:servic ...

  7. Context initialization failed

    Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: Invali ...

  8. EDK II之DXE Core框架简介

    本文旨在简单的介绍一下DXE阶段的工作原理: UDK2015的开源代码下载:https://github.com/tianocore/tianocore.github.io/wiki/EDK-II D ...

  9. MSVCR120.dll 解决

    https://www.microsoft.com/en-us/download/details.aspx?id=40784 装之 from : https://answers.microsoft.c ...

  10. jar中META-INF

    一直记得META-INF中只有在直接启动jar可执行文件时需要在manifest中配置启动类,最近看dubbo的配置,发现dubbo的配置都丢在META-INF下,特地搜索了下,官网对于META-IN ...