解题报告:X、骑士共存问题(最大独立集)(匈牙利 / 最大流)
X、骑士共存问题(最大独立集)(匈牙利 / 最大流)
题目链接
【问题分析】
二分图最大独立集,转化为二分图最大匹配,从而用最大流解决。
【建模方法】
首先把棋盘黑白染色,使相邻格子颜色不同。把所有可用的黑色格子看做二分图X集合中顶点,可用的白色格子看做Y集合顶点。建立附加源S汇T,从S向X集合中每个顶点连接一条容量为1的有向边,从Y集合中每个顶点向T连接一条容量为1的有向边。从每个可用的黑色格子向骑士一步能攻击到的可用的白色格子连接一条容量为无穷大的有向边。求出网络最大流,要求的结果就是可用格子的数量减去障碍数再减去最大流量。
【建模分析】
用网络流的方法解决棋盘上的问题,一般都要对棋盘黑白染色,使之成为一个二分图。放尽可能多的不能互相攻击的骑士,就是一个二分图最大独立集问题。有关二分图最大独立集问题,更多讨论见国家队论文《最小割模型在信息学竞赛中的应用》作者胡伯涛。
本题数据范围200, 如果按照奇数建图可以用匈牙利算法侥幸AC,正解还是应该使用最大流算法。
匈牙利算法
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define x first
#define y second
using namespace std;const int N = 507, M = 5007;typedef pair<int, int> PII;int n, m, t;
PII match[N][N];
bool g[N][N];
bool vis[N][N];
int dx[8] = {1, 2, 2, 1, -1, -2, -2, -1};
int dy[8] = {-2, -1, 1, 2, 2, 1, -1, -2};bool find(int x, int y){for(int i = 0;i < 8;++i){int a = x + dx[i];int b = y + dy[i];if(a <= 0 || b <= 0 || a > n || b > m || vis[a][b] || g[a][b])continue;vis[a][b] = true;PII t = match[a][b];if(t.x == -1 || find(t.x, t.y)){match[a][b] = {x,y};return true;}}return false;
}int main(){scanf("%d%d",&n,&t);m = n;for(int i = 1;i <= t;++i){int x,y;scanf("%d%d",&x,&y);g[x][y] = true;}memset(match, -1, sizeof match);int res = 0;for(int i = 1;i <= n;++i)for(int j = 1;j <= m;++j){if(i + j & 1 && !g[i][j])//反正就是一半一半{memset(vis,0,sizeof vis);if(find(i, j))res ++ ;}}printf("%d\n",n * m - t - res);return 0;
}
最大流
待补
注:部分题解来自 线性规划与网络流24题解题报告,个人留存学习使用
解题报告:X、骑士共存问题(最大独立集)(匈牙利 / 最大流)相关推荐
- 解题报告 之 SGU438 The Glorious Karlutka River 时间流(动态流)
解题报告 之 SGU438 The Glorious Karlutka River Description A group of Mtourists are walking along the Ka ...
- 【网络流24题】解题报告:E 、圆桌问题(最大流求二分图多重匹配)
E .圆桌问题(最大流求二分图多重匹配)[省选/NOI- ] 可以直观的想到,二分图的左边是单位,右边是桌子 由于题目的限制 每个单位只能在一个桌子坐一个人 所以我们就把每个单位向各个桌子连一道流量为 ...
- 最小割 ---- 二分图最大独立集(集合冲突模型) ---- 骑士共存 方格取数(网络流24题)
二分图独立集 定理: 二分图最大独立集=n - 二分图最大匹配 其实二分图独立集是特殊的一种最大权闭合子图.我们根据上文"收益"的思想,把选某个点的收益看为1,左部节点为正权点,右 ...
- 解题报告:线性规划与网络流24题
目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...
- P3355 骑士共存问题
P3355 骑士共存问题 题目描述 在一个 n*n (n <= 200)个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入 对于给定的 n*n ...
- 解题报告 (九) 二分图最大匹配
文章目录 二分图最大匹配 解题报告 一.最大匹配模板题 HDU 1083 Courses HDU 2063 过山车 HDU 1528 Card Game Cheater HDU 1179 Olliva ...
- [codevs 1922] 骑士共存问题
[codevs 1922] 骑士共存问题 题解: 二分图最大独立集问题. 二分图的最大独立集: 选出一些点,让两两之间没有边相连. 二分图最大独立集问题一般转化为它的对偶问题--最小覆盖集,因为最大独 ...
- P3355 骑士共存问题(网络流)
P3355 骑士共存问题 经典的最大独立集问题,最大独立集就是最小点覆盖的补集,因为最小点覆盖等于最大匹配,所以最大独立集等于点数减去最大匹配.
- 2015 CQU 重庆大学程序设计竞赛 解题报告
前言 儿童节快乐~~ 啊对了首先想带标程回家看的可以来这里:教主大大标程包 /我的现场赛代码 在校赛这样三人组队两台电脑的环境下,单挑的压力着实是十分之大--毕竟在同等条件下别人手速只要超过自己的一半 ...
最新文章
- navision系统和sap区别_(三)SAP On Premise和SAP S/4 HANA Cloud的区别
- 麦迪逊大学计算机科学咋样,威斯康星大学麦迪逊分校计算机科学基本信息全览...
- 中移M5311-NBIOT-低功耗OPENCPU开发-MQTT
- 知识图谱前端插件_前端学习曲线原来越陡,说说我的学习经历
- 手机端仿ios的银行下拉脚本五
- 功夫小子实践开发-资源异步加载及过渡场景的分析和实现
- (转载)oracle10g在win10上的安装
- QT项目二:局域网聊天工具
- 学习笔记(12):Google开发专家带你学 AI:入门到实战(Keras/Tensorflow)(附源码)-深度学习“四件套”:数据、模型、损失函数与优化器
- GPS卫星星历与卫星历书的区别
- 第八次作业-项目进度计划
- laravel8+jwt+邮箱注册验证
- 天天酷跑php源码_run 模仿“天天酷跑”的游戏功能,涉及引擎编程,Libgdx 结构。图像绘制和动画,地图编 Game Engine 271万源代码下载- www.pudn.com...
- 七星购物巨亏3.8亿港元 拟转型空中沃尔玛
- 飞鱼游戏校招美术上岸指南?看这篇就够
- 微信公众号接入图灵机器人
- Docker 搭建 LNMP + Wordpress
- 少年为了学计算机的电影,少年十大励志电影排行榜 能改变人生的励志电影推荐...
- AVD Pixel_2_API_30 is already running. lf that is not the case, delete the files at
- App Store审核条款更新:WWDC 2016重写版本