| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 洛谷P4878 [USACO05DEC]Layout G 题解 -> 正文阅读 |
|
[数据结构与算法]洛谷P4878 [USACO05DEC]Layout G 题解 |
P4878 [USACO05DEC]Layout G题目链接:P4878 [USACO05DEC]Layout G
我们可以发现题目给的数据本质上就是 v ? u ≥ d i v-u\ge d_i v?u≥di???? 或 v ? u ≤ d i v-u \le d_i v?u≤di???????? 这是什么?差分约束! 差分约束:根据三角不等式 d u + w ( u , v ) ≥ d v d_u + w(u,v) \ge d_v du?+w(u,v)≥dv?? 的构成,我们可以把形如 v ? u ≥ d i v-u\ge d_i v?u≥di?? 的不等式转化为 v ? d i ≥ u v-d_i\ge u v?di?≥u (可以看作 v v v 向 u u u 连了一条边权为 ? d i -d_i ?di? 的有向边),同理 v ? u ≤ d i v-u \le d_i v?u≤di? 转化为 u + d i ≥ v u+d_i \ge v u+di?≥v 这里不过多讲解差分约束了 那么为什么差分约束后求最短路就是最大值呢? 因为求最短路是由无穷大向下不断约束得到的,因此得到的是最大值(同理求最长路就是最小值) 那我们只要按题意建图就行了 要注意的是,每个奶牛 i i i 满足 d i ? 1 ≤ d i d_{i-1} \le d_{i} di?1?≤di? ,其中 d d d? 表示所在位置,因此相邻的也要建边 为什么要强调这一点呢? 如下图: 如果没有建边,会发现答案为 5 5 5 (如上图所示) 如果建了边,答案才正确(该情况无解) 那现在只要从 1 1 1 开始跑SPFA就好了 但是还有问题, 1 1 1? 并不能保证与所有结点连通,而我们知道差分约束无解的情况就是图中有负环 这个问题好解决,我们先在原图上建一个超级结点 0 0 0 与所有结点相连(边权为 0 0 0 ),在 0 0 0 跑一次SPFA判断即可判断解的情况 说了这么多,是不是有点晕( 理一下思路:
代码如下
转载请说明出处 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/25 22:47:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |