IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 题解 [国家集训队]圈地计划 -> 正文阅读

[数据结构与算法]题解 [国家集训队]圈地计划

这篇题解主要是对建模的详细说明(?

众所周知,最小割求的是最小值,所以我们肯定要转化为理论最大值-实际最小值,先考虑一个 naive 的模型:

这种情况下,我们理想状态下 ( i , j ) (i,j) (i,j) 的贡献应该是 a i , j + b i , j a_{i,j}+b_{i,j} ai,j?+bi,j?,很不幸, ( i , j ) (i,j) (i,j) 只能取一种状态,也就是实际上它的贡献是 a i , j + b i , j ? min ? ( a i , j , b i , j ) a_{i,j}+b_{i,j}-\min(a_{i,j},b_{i,j}) ai,j?+bi,j??min(ai,j?,bi,j?)

这个时候明眼人已经能看出最小割了,回想一下最小割解决什么问题?集合划分的问题,建一个流网络, s s s 为源点, t t t 为汇点,每个节点 ( i , j ) (i,j) (i,j) 连向 s s s t t t,容量分别为 a i , j , b i , j a_{i,j},b_{i,j} ai,j?,bi,j? ,一个 s ? t s-t s?t 割的实际意义就是与 s s s 在同一子集的节点 ( i , j ) (i,j) (i,j) a i , j a_{i,j} ai,j?,与 t t t 在同一子集的节点 ( i , j ) (i,j) (i,j) b i , j b_{i,j} bi,j?。最小割割掉的边,实际上就是每个节点舍弃的状态(舍弃最小,答案就最大)。

回到这个问题,看到网格图考虑黑白染色,对于黑点就按上述方式建模,对于白点就翻转一下源点和汇点就好。

但是,现在我们还是什么都没做,因为这个模型 P 用没有。真正让这个模型有用的就是 c i , j c_{i,j} ci,j? 的限制。

对于每一个黑点,由于我们的染色规则,必然它四个相邻的点是白点,考虑对于每个黑点计算贡献,显然这个东西可以拆开计算:

图很丑,见谅。

于是乎,一个黑点和四个白点理论最大贡献就是:

∑ c i , j + c i + d x , i + d y ( d x ∈ [ ? 1 , 1 ] , d y ∈ [ ? 1 , 1 ] ) \sum c_{i,j}+c_{i+dx,i+dy}(dx\in[-1,1],dy\in[-1,1] ) ci,j?+ci+dx,i+dy?(dx[?1,1],dy[?1,1])

显然理论上限显然达不到,于是我们把刚刚的模型从垃圾桶捡回来(注意,这里是只有两个点的简单情况):

注意看中间是双向边。

问题解决了!

为什么呢?根据题目定义只有当两个相邻的点所取状态不同才会产生 c c c 的贡献,此时也就是这两个点归属于同一集合(因为不同颜色的汇点源点正好相反),不用删去 c i 1 , j 1 + c i 2 , j 2 c_{i1,j1}+c_{i2,j2} ci1,j1?+ci2,j2? 这条边,而如果两个点状态相同,它们会归属于不同集合,这样的情况下由于两者联通, s , t s,t s,t 必然联通,不符合流网络中割的定义,就一定会删除 c i 1 , j 1 + c i 2 , j 2 c_{i1,j1}+c_{i2,j2} ci1,j1?+ci2,j2? 这条边,也符合题意,所以跑个最大流求最小割就好了。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 08:04:35  更:2021-07-28 08:04:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 12:37:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码