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. decltype类型声明- 现代C++新特性总结

    decltype类型声明 有时会遇到这样的情况:希望从表达式的类型推断出要定义的变量的类型,但不想用该表达式的值去初始化变量.为了满足这一需求,C++11引入了decltype,它的作用是选择并返回操 ...

  2. ubuntu,windows 卸载安装mysql

    首先删除mysql: sudo apt-get remove mysql-* 1 然后清理残留的数据 dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dp ...

  3. 配置tomcat通过客户端访问

    1:在tomcat    conf/tomcat-users.xml 文件里  配置用户名和密码,以及访问方式 For example, to add the manager-gui role to ...

  4. Kylin安装问题--/home/hadoop-2.5.1/contrib/capacity-scheduler/.jar (No such file or directory)

    WARNING: Failed to process JAR [jar:file:/home/hadoop-2.5.1/contrib/capacity-scheduler/.jar!/] for T ...

  5. [py]django模板继承

    参考 1.展示arr,d等数据类型 2.逻辑for if / url获取 3.获取内置变量 django模板继承 通过搞一个base.html 这个base.html可以包含两类 block片断 其他 ...

  6. Tomcat重启session失效

    在Tomcat的目录下找到context.xml,取消掉<Manager pathname="" /> 这句的注释.

  7. PAT 1003 Emergency[图论]

    1003 Emergency (25)(25 分) As an emergency rescue team leader of a city, you are given a special map ...

  8. [lr] 常用快捷键

    界面基本操作 F5               : 隐藏/显示上部面板 F6               : 隐藏/显示下部面板 F7               : 隐藏/显示左部面板 F8     ...

  9. 用python与文件进行交互

    一.文件处理 1.介绍 计算机系统:计算机硬件,操作系统,应用程序 应用程序无法直接操作硬件,通过操作系统来操作文件,进而读/写硬件中的文件. python打开文件过程: #打开 f=open('a. ...

  10. 微信小程序-1

    微信小程序 (开发微信小程序基础:HTML+js+css) l  准备工作 工具安装 开发工具是由微信官方提供 项目的预览(校验环境) l  开发体验阶段 -         Hello world ...