1922 骑士共存问题

题目描述 Description

在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘
上某些方格设置了障碍,骑士不得进入。

对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑
士,使得它们彼此互不攻击。

输入描述
Input Description

第一行有2 个正整数n 和m (1<=n<=200, 0<=m<n^2),
分别表示棋盘的大小和障碍数。接下来的m 行给出障碍的位置。每行2 个正整数,表示障
碍的方格坐标。

输出描述
Output Description

将计算出的共存骑士数输出

样例输入
Sample Input

3 2

1 1

3 3

样例输出
Sample Output

5

数据范围及提示
Data Size & Hint

详见试题

【题解】

卡了半天常还是卡不过去,等以后再用Dinic写吧

先进行黑白染色(此类问题常用),不难发现骑士

只会从黑->白或白->黑,因此我们令X集合为黑,

Y集合为白,从黑->白则连一条边(给黑白格子编
号),

然后找最大独立集即可。注意总的节点数
是没有障碍的

点,做最大匹配的时候也要用没有
障碍的格子的染色

编号。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring> inline void read(int &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '') c = ch, ch = getchar();
while(ch <= '' && ch >= '') x = x * + ch - '', ch = getchar();
if(c == '-')x = -x;
} const int MAXN = + ;
const int dx[] = {,-,,-,,-,,-};
const int dy[] = {,-,,-,-,,-,}; int gg[MAXN][MAXN], b[MAXN][MAXN], n, m, lk[],bb[]; struct Edge
{
int u,v,next;
Edge(int _u, int _v, int _next){u = _u;v = _v;next = _next;}
Edge(){}
}edge[]; int head[]; int dfs(int u)
{
for(int pos = head[u];pos;pos = edge[pos].next)
{
int v = edge[pos].v;
if(bb[v])continue;
bb[v] = ;
if(lk[v] == - || dfs(lk[v]))
{
lk[v] = u;
return ;
}
}
return ;
} int xiongyali(int white)
{
int ans = ;
memset(lk, -, sizeof(lk));
for(register int i = ;i <= white;++i)
{
memset(bb, , sizeof(bb));
ans += dfs(i);
}
return ans;
} int main()
{
read(n), read(m);
register int black, white, i;
for(i = ;i <= m;++ i)
{
read(black), read(white);
b[black][white] = ;
}
//X集合:1 白色 Y集合:0 黑色
black = white = ;
for(i = ;i <= n;++ i)
for(int j = ;j <= n;++ j)
if(!b[i][j])
if((i + j)&) gg[i][j] = ++ black;
else gg[i][j] = ++ white;
register int xx, yy, cnt = ;
for(i = ;i <= n;++ i)
for(int j = ;j <= n;++ j)
if(!((i + j)&) && !b[i][j])
for(int k = ;k < ;++ k)
{
xx = i + dx[k], yy = j + dy[k];
if(xx <= || yy <= || xx > n || yy > n || b[xx][yy])continue;
yy = gg[xx][yy], xx = gg[i][j];
edge[++cnt] = Edge(xx,yy,head[xx]);
head[xx] = cnt;
}
printf("%d", white + black - xiongyali(white));
return ;
}

90分TLE代码

Codevs1922 骑士共存问题的更多相关文章

  1. COGS746. [网络流24题] 骑士共存

    骑士共存问题«问题描述:在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘 上某些方格设置了障碍,骑士不得进入. «编程任务:对于给定的n*n个方格的国际象棋棋盘和障碍标志 ...

  2. P3355 骑士共存问题

    P3355 骑士共存问题 题目描述 在一个 n*n (n <= 200)个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入 对于给定的 n*n ...

  3. loj #6226. 「网络流 24 题」骑士共存问题

    #6226. 「网络流 24 题」骑士共存问题   题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上 ...

  4. AC日记——[网络流24题]骑士共存 cogs 746

    746. [网络流24题] 骑士共存 ★★☆   输入文件:knight.in   输出文件:knight.out   简单对比时间限制:1 s   内存限制:128 MB 骑士共存问题 «问题描述: ...

  5. [网络流24题] 骑士共存(cogs 746)

    骑士共存问题«问题描述:在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘 上某些方格设置了障碍,骑士不得进入. «编程任务:对于给定的n*n个方格的国际象棋棋盘和障碍标志 ...

  6. [网络流24题] 方格取数问题/骑士共存问题 (最大流->最大权闭合图)

    洛谷传送门 LOJ传送门 和太空飞行计划问题一样,这依然是一道最大权闭合图问题 “骑士共存问题”是“方格取数问题”的弱化版,本题解不再赘述“骑士共存问题”的做法 分析题目,如果我们能把所有方格的数都给 ...

  7. P3355 骑士共存问题 二分建图 + 当前弧优化dinic

    P3355 骑士共存问题 题意: 也是一个棋盘,规则是“马”不能相互打到. 思路: 奇偶点分开,二分图建图,这道题要注意每个点可以跑八个方向,两边都可以跑,所以边 = 20 * n * n. 然后di ...

  8. Cogs 746. [网络流24题] 骑士共存(最大独立集)

    [网络流24题] 骑士共存 ★★☆ 输入文件:knight.in 输出文件:knight.out 简单对比 时间限制:1 s 内存限制:128 MB 骑士共存问题 «问题描述: 在一个n*n个方格的国 ...

  9. P3355 骑士共存问题 网络流

    骑士共存 题目描述 在一个 n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入 对于给定的 n*n 个方格的国际象棋棋盘和障碍标志,计算棋盘上最 ...

随机推荐

  1. 19-10-30-Night-V

    看到$\text{V}$就想到了V神. 快快放假.... $\text{Vicetone}$最新单曲$\text{Aftermath}$大家听了嘛…… (真不是学数论之后的意思啊,译为‘后果’,显然是 ...

  2. NSLayoutConstraint 开源框架

    https://github.com/cloudkite/Masonry Masonry is a light-weight layout framework which wraps AutoLayo ...

  3. JEECMS 自定义标签

    CMS 是”Content Management System” 的缩写,意为” 内容管理系统”. 内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场.对于内容管理,业界还没有一个统 ...

  4. ch5 vlsms

    Variabel Length Subnet Mask vlsms 较早的路由协议 ripv1 没有为子网准备的字段,子网信息会被丢失. 这意味着如果一个路由器运行着一个rip协议具有一个确定的子网掩 ...

  5. VIsualSVN server 安装及旧仓库导入

    安装参考: 1,  http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html SVN服务器搭建和使用(一) Subversi ...

  6. 架构发展史Spring Cloud

    转自:https://www.iteye.com/news/32734 Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文 ...

  7. Df- Linux必学的60个命令

    1.作用 df命令用来检查文件系统的磁盘空间占用情况,使用权限是所有用户. 2.格式 df [options] 3.主要参数 -s:对每个Names参数只给出占用的数据块总数. -a:递归地显示指定目 ...

  8. SQL Server日常积累

    1:      在Sql Server 中增加一列语句:  alter table table_name add column_name [not null] [references ....]  例 ...

  9. mongoDB可视化工具RoBo 3T的安装和使用

    第一步下载RoBo3T https://robomongo.org/download 第二步安装 双击安装包安装,修改安装路径,不停下一步,点击安装. 一路next,最后到了这个页面直接点击finis ...

  10. innodb状态

    Innodb_buffer_pool_pages_data Innodb buffer pool缓存池中包含数据的页的数目,包括脏页.单位是page. Innodb_buffer_pool_pages ...