| |
|
|
开发:
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? 这条边,也符合题意,所以跑个最大流求最小割就好了。 |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/1 17:41:08- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |