传送门

简化题意

给你 \(m\) 个码头,码头之间有双向边连接,\(n\) 天,其中一些码头在某些天会不可用,这 \(n\) 天都要有一条从 \(1\) 到 \(m\) 的路,每一次更换道路会需要 \(k\) 的代价,求这 \(n\) 天每天从 \(1\) 到 \(m\) 的距离之和与更改道路的价值之和的最小值。

Solution

首先我们能想到一个贪心的策略:在保证最短路的同时,需要保证更换道路尽可能少。

然后0我们可以想到令 \(cost_{i,j}\) 为从第 \(i\) 天到第 \(j\) 天走同一条路径的最短长度和,\(f_i\) 为第 \(i\) 天的 \(ans\) 值,于是我们可以列出状态转移方程:

\[f_i\ =\ \min \\{ f_j + k + cost_{j + 1, i} \\}
\]

接下来,我们来处理 \(cost{i, j}\),我们发现只要 \(x\) 号码头在 \(i\) 到 \(j\) 天封闭过一次,在 \(i\) 到 \(j\) 天的路径里就不能选它,所以只需要在跑最短路时判一下 \(x\) 号点是否被封禁即可。

注:若 \(i\) 到 \(j\) 天不能从 \(1\) 走到 \(m\),就把 \(const_{i,j}\) 赋值为 \(INF\) 即可。

时间复杂度

约为 \(O(n^3m)\)

代码实现

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std; #define int long long // 不开longlong见祖宗
const int Days = 105, N = 25, M = 405; int n, m, k, e, Q, x, y, w;
int la[N], en[M], ne[M], len[M], idx;
int dis[N], f[Days], cost[Days][Days];
bool st[N], lock[N], timlock[N][Days];
queue<int > q; void add(int x, int y, int z) {
en[ ++ idx] = y;
ne[idx] = la[x];
la[x] = idx;
len[idx] = z;
} void spfa(int l, int r) {
memset(dis, 0x3f3f3f3f, sizeof dis);
q.push(1), dis[1] = 0, st[1] = 1;
while(q.size()) {
int u = q.front();
st[u] = 0; q.pop();
for (int i = la[u]; i; i = ne[i]) {
int v = en[i];
if(lock[v]) continue;
if(dis[v] > dis[u] + len[i]) {
dis[v] = dis[u] + len[i];
if(!st[v]) {
q.push(v);
st[v] = 1;
}
}
}
}
cost[l][r] = (dis[m]>=0x3f3f3f3f3f3f3f3f ? 1 : r - l + 1) * dis[m];
} signed main(){
ios::sync_with_stdio(0); cin >> n >> m >> k >> e;
while(e -- ) {
cin >> x >> y >> w;
add(x, y, w); add(y, x, w); // 注意是双向边
}
cin >> Q;
while(Q -- ) {
cin >> w >> x >> y;
for (int i = x; i <= y; ++ i ) timlock[w][i] = 1; //打标记
} for (int i = 1; i <= n; ++ i )
for (int j = i; j <= n; ++ j ) {
for (int l = 1; l <= m; ++ l )
for (int tim = i; tim <= j; ++ tim ) {
lock[l] |= timlock[l][tim];
if(lock[l]) break;
}
spfa(i, j);
for (int l = 1; l <= m; ++ l ) lock[l] = 0; //记得清空
} for (int i = 1; i <= n; ++ i ) {
f[i] = cost[1][i]; //初始化为全用一条路
for (int j = 1; j < i; ++ j ) {
f[i] = min(f[i], f[j] + k + cost[j + 1][i]);
}
} cout << f[n];
return 0;
}

Luogu1772 [ZJOI2006] 物流运输的更多相关文章

  1. [luogu1772 ZJOI2006] 物流运输 (最短路 线性dp)

    题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...

  2. [ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5999  Solved: 2473[Submit][Stat ...

  3. bzoj1003 [ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6300  Solved: 2597[Submit][Stat ...

  4. 【bzoj1003】[ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6331  Solved: 2610[Submit][Stat ...

  5. bzoj1003: [ZJOI2006]物流运输

    dp+最短路.暴力枚举就可以了.O(n3logn).样例中m=n然后测样例过了.然后 54行习惯性的dis[n]然后就WA了!!!. #include<cstdio> #include&l ...

  6. BZOJP1003 [ZJOI2006]物流运输trans

    BZOJP1003 [ZJOI2006]物流运输trans 1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec  Memory Limit: 162 MB Sub ...

  7. BZOJ 1003 [ZJOI2006]物流运输trans

    1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4242  Solved: 1765[Submit] ...

  8. bzoj1003[ZJOI2006]物流运输trans

    1003: [ZJOI2006]物流运输trans Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常 ...

  9. BZOJ 1003: [ZJOI2006]物流运输trans(最短路+dp)

    1A,爽! cost[i][j]表示从第i天到第j天不改路线所需的最小花费,这个可以用最短路预处理出.然后dp(i)=cost[j][i]+dp(j-1)+c. c为该路线的花费. --------- ...

  10. BZOJ_1003_[ZJOI2006]物流运输_最短路+dp

    BZOJ_1003_[ZJOI2006]物流运输_最短路+dp 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1003 分析: 这种一段一段的显 ...

随机推荐

  1. idea 调试小心得

    1.为什么需要Debug 目的:开发过程中 查找或定位错误或者阅读源码 程序运行的结果(4种情况) 情况1:没有任何bug,程序执行正确! 情况2: 运行以后,出现了错误或异常信息.但是通过 日志文件 ...

  2. 记录一次线上gitlab11.x升级gitlab14.x版本操作

    前言:gitlab11升级到14还是有挺多需要注意的坑,也算是做一次积累吧,升级前后,gitalb的WEB界面也变化了很多,升级过程需要注意的地方我放到最后说明,挺关键的 一.首先需要下载好要升级的包 ...

  3. Android笔记--外部存储空间

    存储文件的操作 外部存储空间 私有存储空间和公共存储空间 外部存储空间分为私有+公有 保存文件到外部存储空间的相关代码操作: 私有空间: 公有空间: 记得增加权限(Android_Manifest.x ...

  4. 如何基于 React Native 快速实现一个视频通话应用

    今天,我们将会一起开发一个包含 RTE (实时互动)场景的 Flutter 应用. 项目介绍 靠自研开发包含实时互动功能的应用非常繁琐,你要解决维护服务器.负载均衡等难题,同时还要保证稳定的低延迟. ...

  5. springboot切换web服务器

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  6. 易基因:PIWI/piRNA在人癌症中的表观遗传调控机制(DNA甲基化+m6A+组蛋白修饰)|综述

    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因. 2023年03月07日,南华大学衡阳医学院李二毛团队在<Molecular Cancer>杂志发表了题为"The ...

  7. 《HelloTester》第3期

    1.前言 读了之前的简历篇和投递篇,你应该开始准备迎接面试了,那么,在面试前,我们都需要准备些什么呢?是要默默的去背诵那些理论知识,还是熟悉一下自己的技能?又或者去看看公司要求的那些技术呢?接下来这篇 ...

  8. 一个bug重温对JRE和JDK的关系思考

    前几天做一个springboot项目时,导入的JAVA版本是17,然后后面想更贴近下企业中使用的JDK版本就改成了JDK 1,8,然后就编译错误,bug如下 java: java.lang.Unsup ...

  9. 聊天小精灵ChatGPT,好与不好大揭秘!

    一.引言 在一个遥远的地球上,有一个名为ChatGPT的魔法盒子,它能够用智慧回答你的问题,解决你的困扰.它是一个聪明的家伙,但和任何家伙一样,有优点也有缺点.现在就让我们一起来探索这个神秘的魔法盒子 ...

  10. Mac 音频转换器推荐 DRmare Audio Converter、Audi Free Auditor

    给大家推荐两款 Mac 上的音频转换器,这两款转换器都可以转换苹果音乐,iTunes歌曲或者一些常规的音轨到MP3, FLAC, WAV, M4A, AAC格式等等,转换后我们就可以在所有的设备和播放 ...