题目:http://www.joyoi.cn/problem/tyvj-1035

把可放的位置作为节点,相邻的连边。

可用天然有的编号作为节点的编号。

果然只用连单向边就行了。也只需记录另一部的对应点。

注意易写错的那个地方。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,x,y,head[],xnt,per[],ans;
bool vis[],in[],er[];
struct Node{
int next,to;
}edge[];
void add(int x1,int y1,int x2,int y2)
{
int u=n*(x1-)+y1,v=n*(x2-)+y2;
edge[++xnt].next=head[u];
edge[xnt].to=v;
head[u]=xnt;
}
void ad(int x,int y)
{
if(x>&&!er[n*(x-)+y])add(x,y,x-,y);
if(x<n&&!er[n*x+y])add(x,y,x+,y);
if(y>&&!er[n*(x-)+y-])add(x,y,x,y-);
if(y<n&&!er[n*(x-)+y+])add(x,y,x,y+);
}
bool dfs(int a)
{
for(int i=head[a],v;i;i=edge[i].next)
if(!vis[v=edge[i].to])
{
vis[v]=;
if(!per[v]||dfs(per[v]))//////dfs(per[v]) 而不是dfs(v)
{
per[v]=a;
return true;
}
}
return false;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
er[n*(x-)+y]=;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if((i+j)%&&!er[n*(i-)+j])
ad(i,j);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if((i+j)%&&!in[n*(i-)+j])
{
memset(vis,,sizeof vis);
int u=n*(i-)+j;
if(dfs(u))in[u]=,ans++;
}
printf("%d",ans);
return ;
}

tyvj1035棋盘覆盖——二分图匹配的更多相关文章

  1. TYVJ1035 棋盘覆盖

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩 ...

  2. cogs_396_魔术球问题_(最小路径覆盖+二分图匹配,网络流24题#4)

    描述 http://cojs.tk/cogs/problem/problem.php?pid=396 连续从1开始编号的球,按照顺寻一个个放在n个柱子上,\(i\)放在\(j\)上面的必要条件是\(i ...

  3. BZOJ1143 [CTSC2008]祭祀river 二分图匹配 最小链覆盖

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1143 题意概括 给出一个有向图.求最小链覆盖. 题解 首先说两个概念: 链:一条链是一些点的集合, ...

  4. 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...

  5. [Cogs728] [网络流24题#3] 最小路径覆盖 [网络流,最大流,二分图匹配]

    建图:源点—>边的起点(集合1中的)—>边的终点(集合2中的)—>汇点,所有边权均为1, 计算最大流,最后枚举起点的出边,边权为0的即为匹配上的, 可以这样理解:每条边表示起点和终点 ...

  6. bzoj 2706: [SDOI2012]棋盘覆盖 Dancing Link

    2706: [SDOI2012]棋盘覆盖 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 255  Solved: 77[Submit][Status] ...

  7. 博弈论(二分图匹配):NOI 2011 兔兔与蛋蛋游戏

    Description Input 输入的第一行包含两个正整数 n.m. 接下来 n行描述初始棋盘.其中第i 行包含 m个字符,每个字符都是大写英文字母"X".大写英文字母&quo ...

  8. HDU1507 Uncle Tom's Inherited Land* 二分图匹配 匈牙利算法 黑白染色

    原文链接http://www.cnblogs.com/zhouzhendong/p/8254062.html 题目传送门 - HDU1507 题意概括 有一个n*m的棋盘,有些点是废的. 现在让你用1 ...

  9. CODEVS 2171 棋盘覆盖

    2171 棋盘覆盖 给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少12的多米诺骨牌进行掩盖. 错误日志: 直接在模板上调整 \(maxn\) 时没有在相应邻接表数 ...

随机推荐

  1. OC 内存管理之自动内存管理ARC

    一.基本简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因 ...

  2. EchoService

    dubbo为consumer端的代理对象实现了EchoService接口. 使用示例: <dubbo:reference id="hello" interface=" ...

  3. 下拉选择框 Spinner的用法。

    代码如下: package com.lixu.xialakuang; import android.app.Activity; import android.content.Context; impo ...

  4. ssh的配置,ssh打开密钥登陆,关闭密码登陆。

    刚装玩fedora,那么我们就以fedora为例来说一下怎么配置: 1.先确认是否已安装ssh服务: [root@localhost ~]# rpm -qa | grep openssh-server ...

  5. 第一个dubbo+zookeeper项目例子

    公司项目要用这两个东西,于是打算学习它. 首先我的理解dubbo是什么?zookeeper是什么?为什要这么搞. 项目分层: 传统的,mvc -->垂直架构(将模块抽取成单独项目,项目互相调用) ...

  6. Eclipse js报错问题解决办法

    最近在Eclipse中导入新项目后会发现js报错,但是不影响程序的运行,但是对于程序员的我们来说多少还是比较在意代码前面的红色的X的,有木有??? 上网也查了很多方法,对于其中一种方法表示不能完全解决 ...

  7. iOS-UIImage变为NSData并进行压缩

    <iOS>UIImage变为NSData并进行压缩   //sdk中提供了方法可以直接调用 UIImage *img = [UIImage imageNamed:@"some.p ...

  8. 如何使用Java读写系统属性?

    如何使用Java读写系统属性? 读: Properties props = System.getProperties(); Enumeration prop_names = props.propert ...

  9. ipAllocate_and_linkState_hacking

    #!/bin/bash # Author: Joshua Chen # Date: Jun # Location: Shenzhen #. 解读这两个程序是因为程序中包含了大部分shell脚本的基本语 ...

  10. Activity的四大启动模式

    在自己清单中的Activity里配置这四大启动之一. stander    标准模式   先进后出 singletop     会检查栈顶如果有,那么就复用,不会重新开启. singletask    ...