tyvj1035棋盘覆盖——二分图匹配
题目: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棋盘覆盖——二分图匹配的更多相关文章
- TYVJ1035 棋盘覆盖
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩 ...
- cogs_396_魔术球问题_(最小路径覆盖+二分图匹配,网络流24题#4)
描述 http://cojs.tk/cogs/problem/problem.php?pid=396 连续从1开始编号的球,按照顺寻一个个放在n个柱子上,\(i\)放在\(j\)上面的必要条件是\(i ...
- BZOJ1143 [CTSC2008]祭祀river 二分图匹配 最小链覆盖
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1143 题意概括 给出一个有向图.求最小链覆盖. 题解 首先说两个概念: 链:一条链是一些点的集合, ...
- 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...
- [Cogs728] [网络流24题#3] 最小路径覆盖 [网络流,最大流,二分图匹配]
建图:源点—>边的起点(集合1中的)—>边的终点(集合2中的)—>汇点,所有边权均为1, 计算最大流,最后枚举起点的出边,边权为0的即为匹配上的, 可以这样理解:每条边表示起点和终点 ...
- bzoj 2706: [SDOI2012]棋盘覆盖 Dancing Link
2706: [SDOI2012]棋盘覆盖 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 255 Solved: 77[Submit][Status] ...
- 博弈论(二分图匹配):NOI 2011 兔兔与蛋蛋游戏
Description Input 输入的第一行包含两个正整数 n.m. 接下来 n行描述初始棋盘.其中第i 行包含 m个字符,每个字符都是大写英文字母"X".大写英文字母&quo ...
- HDU1507 Uncle Tom's Inherited Land* 二分图匹配 匈牙利算法 黑白染色
原文链接http://www.cnblogs.com/zhouzhendong/p/8254062.html 题目传送门 - HDU1507 题意概括 有一个n*m的棋盘,有些点是废的. 现在让你用1 ...
- CODEVS 2171 棋盘覆盖
2171 棋盘覆盖 给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少12的多米诺骨牌进行掩盖. 错误日志: 直接在模板上调整 \(maxn\) 时没有在相应邻接表数 ...
随机推荐
- OC 内存管理之自动内存管理ARC
一.基本简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因 ...
- EchoService
dubbo为consumer端的代理对象实现了EchoService接口. 使用示例: <dubbo:reference id="hello" interface=" ...
- 下拉选择框 Spinner的用法。
代码如下: package com.lixu.xialakuang; import android.app.Activity; import android.content.Context; impo ...
- ssh的配置,ssh打开密钥登陆,关闭密码登陆。
刚装玩fedora,那么我们就以fedora为例来说一下怎么配置: 1.先确认是否已安装ssh服务: [root@localhost ~]# rpm -qa | grep openssh-server ...
- 第一个dubbo+zookeeper项目例子
公司项目要用这两个东西,于是打算学习它. 首先我的理解dubbo是什么?zookeeper是什么?为什要这么搞. 项目分层: 传统的,mvc -->垂直架构(将模块抽取成单独项目,项目互相调用) ...
- Eclipse js报错问题解决办法
最近在Eclipse中导入新项目后会发现js报错,但是不影响程序的运行,但是对于程序员的我们来说多少还是比较在意代码前面的红色的X的,有木有??? 上网也查了很多方法,对于其中一种方法表示不能完全解决 ...
- iOS-UIImage变为NSData并进行压缩
<iOS>UIImage变为NSData并进行压缩 //sdk中提供了方法可以直接调用 UIImage *img = [UIImage imageNamed:@"some.p ...
- 如何使用Java读写系统属性?
如何使用Java读写系统属性? 读: Properties props = System.getProperties(); Enumeration prop_names = props.propert ...
- ipAllocate_and_linkState_hacking
#!/bin/bash # Author: Joshua Chen # Date: Jun # Location: Shenzhen #. 解读这两个程序是因为程序中包含了大部分shell脚本的基本语 ...
- Activity的四大启动模式
在自己清单中的Activity里配置这四大启动之一. stander 标准模式 先进后出 singletop 会检查栈顶如果有,那么就复用,不会重新开启. singletask ...