传送门

预处理cost[i][j]表示从第i天到第j天起点到终点的最短距离

f[i]表示前i天到从起点到终点的最短距离

f[0] = -K

f[i] = min(f[i], f[j - 1] + cost[j][i] + K)

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#define N 1001
#define min(x, y) ((x) < (y) ? (x) : (y)) int n, m, K, e, d, cnt;
int f[N], cost[N][N];
bool b[N][N], flag[N], vis[N];
int head[N], to[N], next[N], val[N], dis[N];
//f[i]表示前i天从起点到终点的最小费用
//cost[i][j]表示从第i天到, b[i][j]表示第i个码头第j天是否不能用 std::queue <int> q; inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} inline void add(int x, int y, int z)
{
to[cnt] = y;
val[cnt] = z;
next[cnt] = head[x];
head[x] = cnt++;
} inline int spfa()
{
int i, u, v;
memset(vis, 0, sizeof(vis));
memset(dis, 127, sizeof(dis));
q.push(1);
dis[1] = 0;
while(!q.empty())
{
u = q.front();
q.pop();
vis[u] = 0;
for(i = head[u]; i ^ -1; i = next[i])
{
v = to[i];
if(flag[v]) continue;
if(dis[v] > dis[u] + val[i])
{
dis[v] = dis[u] + val[i];
if(!vis[v])
{
q.push(v);
vis[v] = 1;
}
}
}
}
return dis[m];
} int main()
{
int i, j, k, l, x, y, z;
n = read();
m = read();
K = read();
e = read();
memset(head, -1, sizeof(head));
for(i = 1; i <= e; i++)
{
x = read();
y = read();
z = read();
add(x, y, z);
add(y, x, z);
}
d = read();
for(i = 1; i <= d; i++)
{
z = read();
x = read();
y = read();
for(j = x; j <= y; j++) b[z][j] = 1;
}
for(i = 1; i <= n; i++)
for(j = i; j <= n; j++)
{
memset(flag, 0, sizeof(flag));
for(k = 1; k <= m; k++)
for(l = i; l <= j; l++)
flag[k] |= b[k][l];
cost[i][j] = spfa();
}
memset(f, 127, sizeof(f));
f[0] = -K;
for(i = 1; i <= n; i++)
for(j = 1; j <= i; j++)
if(cost[j][i] <= 1e9)
f[i] = min(f[i], f[j - 1] + cost[j][i] * (i - j + 1) + K);
printf("%d\n", f[n]);
return 0;
}

  

[luoguP1772] [ZJOI2006]物流运输(DP + spfa)的更多相关文章

  1. luoguP1772 [ZJOI2006]物流运输 x

    P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线 ...

  2. 【BZOJ1003】1003: [ZJOI2006]物流运输trans SPFA+DP

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

  3. BZOJ 1003 [ZJOI2006]物流运输trans SPFA+DP

    题意:链接 方法:SPFA+DP 解析:挺好的题目.因为数据范围较小所以用这样的方式能够搞,只是也是挺不好想的. 我们定义cost(i,j)表示从第i天走到第j天运用同一种方式的最小花费,然后因为数据 ...

  4. BZOJ 1003: [ZJOI2006]物流运输(spfa+dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1003 题意: 思路: 首先用spfa计算一下任意两天之内的最短路,dis[a][b]表示的就是在第a ...

  5. 【洛谷 P1772】 [ZJOI2006]物流运输(Spfa,dp)

    题目链接 \(g[i][j]\)表示不走在\(i\text{~}j\)时间段中会关闭的港口(哪怕只关\(1\)天)从\(1\)到\(m\)的最短路. \(f[i]\)表示前\(i\)天的最小花费.于是 ...

  6. bzoj 1003: [ZJOI2006]物流运输【spfa+dp】

    预处理出ans[i][j]为i到j时间的最短路,设f[i]为到i时间的最小代价,转移显然就是 f[i]=min(f[j-1]+ans[j][i]*(i-j+1)+k); #include<ios ...

  7. P1772 [ZJOI2006]物流运输[DP+最短路]

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

  8. 1003: [ZJOI2006]物流运输 = DP+SBFA

    题意就是告诉你有n个点,e条边,m天,每天都会从起点到终点走一次最短路,但是有些点在某些时间段是不可走的,因此在某些天需要改变路径,每次改变路径的成本是K,总成本=n天运输路线长度之和+K*改变运输路 ...

  9. BZOJ.1003.[ZJOI2006]物流运输(DP 最短路Dijkstra)

    题目链接 容易看出是个最短路+DP.既然答案和天数有关,那么就令\(f[i]\)表示前\(i\)天最小成本. 这个转移很好想: \(f[i]=\min(f[i],\ f[j]+cost(j+1,i)+ ...

随机推荐

  1. 基于坐标的自动化测试神器---Total Control快速入门

    1.Total Control简单介绍 一款能够在PC上控制手机的软件,同时可以使用PC 触摸屏.鼠标.键盘, 全面操控 Android 手机,只需通过 USB 或 WiFi 连接手机至电脑,即可随时 ...

  2. C#中this指针的用法示例

    这篇文章主要介绍了C#中this指针的用法,对初学者而言是非常重要的概念,必须加以熟练掌握,需要的朋友可以参考下. 本文实例展示了C#中this指针的用法,对于初学者进一步牢固掌握C#有很大帮助,具体 ...

  3. Python3 写入文件

    Demo: file = open("test.txt", "wb")file.write("string") 上面这段代码运行会报类型错误 ...

  4. php中的define()函数

    <?php define("PI",3.1415926); //定义常量 $r=12;//定义圆半径 echo "半径为12的单位的圆的面积".PI*($ ...

  5. $("xxx").attr添加属性的时候不好用

    今天在工作中碰到了使用$(this).attr("selected","selected")为option属性添加默认值时发现时而好用 时而不好用,后经百度发现 ...

  6. vim下ctrl + s 僵死问题的解决

    vim下ctrl + s 僵死问题的解决 vim  使用vim习惯性手残Ctrl+S ,解决方法 : Ctrl + Q 就能恢复了

  7. HDU 5414 CRB and String (字符串,模拟)

    题意:给两个字符串s和t,如果能插入一些字符使得s=t,则输出yes,否则输出no.插入规则:在s中选定一个字符c,可以在其后面插入一个字符k,只要k!=c即可. 思路:特殊的情况就是s和t的最长相同 ...

  8. Android安卓下拉阻尼效果实现原理及简单实例

    原理  这种效果是通过自定义控件的方式来实现的,我自定义了一个控件类型,这个自定义控件(PullDownDumperLayout)继承自线性布局(LinearLayout).  用户可以下拉弹出的那个 ...

  9. liunx 修改IP地址

    1.安装centos系统,这里就不详细说明了. 2.进入到 vi /etc/sysconfig/network-scripts/ifcfg-eth0      后面的名称有些可能不同 其中,有些可能没 ...

  10. ecpg - 嵌入的 SQL C 预处理器

    SYNOPSIS ecpg [ option...] file... DESCRIPTION 描述 ecpg 是一个嵌入的用于C 语言的 SQL 预编译器. 它把嵌有 SQL 语句的 C 程序通过将 ...