http://www.lydsy.com/JudgeOnline/problem.php?id=1003

题意:

思路:

首先用spfa计算一下任意两天之内的最短路,dis[a][b]表示的就是在第a天~第b天从1到m的最短路。

接下来就是dp了,f[i]表示前i天的最小代价,那么状态转移方程就是:

f[i]=min(f[i],f[j]+dis[j+][i]*(i-j)+k)

注意:边界条件f[0]=-k!

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,ll> pll;
const int INF = 0x3f3f3f3f;
const int maxn=+; int n, m, k, t;
int tot;
int head[maxn];
int flag[maxn][maxn];
int dis[maxn][maxn];
int d[maxn];
int inq[maxn];
ll f[maxn]; struct node
{
int v, w;
int next;
}e[maxn]; void AddEdge(int u, int v, int w)
{
e[tot].v=v;
e[tot].w=w;
e[tot].next=head[u];
head[u]=tot++;
} void spfa(int s, int a, int b)
{
for(int i=;i<=m;i++) d[i]=INF;
queue<int> Q;
Q.push(s);
d[s]=;
while(!Q.empty())
{
int u=Q.front(); inq[u]=; Q.pop();
for(int i=head[u];i!=-;i=e[i].next)
{
int v=e[i].v;
if(flag[v][b]-flag[v][a-]>) continue;
if(d[v]>d[u]+e[i].w)
{
d[v]=d[u]+e[i].w;
if(!inq[v])
{
Q.push(v);
inq[v]=;
}
}
}
}
dis[a][b]=d[m];
} int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d%d%d%d",&n,&m,&k,&t))
{
tot=;
memset(head,-,sizeof(head));
memset(flag,,sizeof(flag));
for(int i=;i<t;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
AddEdge(u,v,w);
AddEdge(v,u,w);
} scanf("%d",&t);
while(t--)
{
int x,a,b;
scanf("%d%d%d",&x,&a,&b);
for(int i=a;i<=b;i++) flag[x][i]=;
} for(int i=;i<=m;i++)
for(int j=;j<=n;j++) flag[i][j]+=flag[i][j-]; //用前缀和可以快速判断i~j天是否可用
94
for(int i=;i<=n;i++)
for(int j=i;j<=n;j++) spfa(,i,j); f[] = -k; //注意边界条件
for(int i = ; i <= n; i ++)
{
f[i] = INF;
for(int j = ; j < i; j++)
f[i] = min(f[i], f[j] + 1LL*dis[j+][i]*(i-j) + k);
}
printf("%d\n",f[n]);
}
return ;
}

BZOJ 1003: [ZJOI2006]物流运输(spfa+dp)的更多相关文章

  1. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: ...

  2. BZOJ 1003: [ZJOI2006]物流运输trans DP+最短路

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

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

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

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

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

  5. bzoj 1003 [ZJOI2006]物流运输(最短路+dp)

    [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 8973  Solved: 3839[Submit][Status][Di ...

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

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

  7. 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 ...

  8. BZOJ 1003 [ZJOI2006]物流运输trans ★(Dijkstra + DP)

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1003 思路 先Dijkstra暴力求出i..j天内不变换路线的最少花费,然后dp[i] = ...

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

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

随机推荐

  1. MSMQ研究

    开发过程记录如下: 1.   本机配置MSMQ ------控制面板-------启动或者关闭Windows功能----默认安装MSMQ即可 注意:本地安装后再VS中才能引用System.Messag ...

  2. 混淆矩阵在Matlab中PRtools模式识别工具箱的应用

    声明:本文用到的代码均来自于PRTools(http://www.prtools.org)模式识别工具箱,并以matlab软件进行实验. 混淆矩阵是模式识别中的常用工具,在PRTools工具箱中有直接 ...

  3. (转)Elasticsearch NoNodeAvailableException None of the configured nodes are available

    问题背景:将es部署到内网中两台服务器,其Ip地址分别为:192.111.222.5,192.111.222.1(部署方式完全一样,是将192.111.222.1服务器上es整个部署包,拷贝到了192 ...

  4. Toaster

    https://wiki.opendaylight.org/view/YANG_Tools:YANG_to_Java_Mapping#Identity https://wiki.opendayligh ...

  5. Python Pandas找到缺失值的位置

    python pandas判断缺失值一般采用 isnull(),然而生成的却是所有数据的true/false矩阵,对于庞大的数据dataframe,很难一眼看出来哪个数据缺失,一共有多少个缺失数据,缺 ...

  6. 通用Dao方法

    import java.lang.reflect.Field; import java.sql.Connection; import java.sql.DatabaseMetaData; import ...

  7. php截取制定长度字符串

    /** +---------------------------------------------------------- * 字符串截取,支持中文和其他编码 +----------------- ...

  8. VS中出现“链接器工具错误,XXX工具模块对于SAFESEH映像是不安全的”的解决方法

    1.“调试”菜单->“属性”->“配置属性”->“链接器”->“命令行” 2.在“其它选项”的输入框里输入 /SAFESEH:NO ,点击“应用”

  9. 终端FQ

    前言我一直以为全局FQ就是所有的都能够自由访问,没想到终端有时候却不行,这里终端一般指的是window的cmd和mac的Terminal.终端一般程序员用的比较多,下载第三方依赖啊,都需要,所以我总结 ...

  10. python3 字典的常用方法

    字典的方法(可能需要重新整理) 函数 说明 D代表字典对象   D.clear() 清空字典 D.pop(key) 移除键,同时返回此键所对应的值 D.copy() 返回字典D的副本,只复制一层(浅拷 ...