题目链接

  对于本题我们设ext[i][j]计算第i个码头在前j天总共有几天不能用(其实就一前缀和),设dis[i][j]是从第i天到第j天不变运输路线的最短路径,设f[i]是前i天运输货物的最小花费。

  然后n2*O(spfa)处理出整个dis数组。判断一个码头a从第i天到第j天能不能用的方法是ext[a][j]-ext[a][i-1],如果该数等于0,则说明这几天没有一天不能用,则spfa的时候可以扩展到该码头;否则至少有一天不能用,spfa的时候也就不能扩展。

  接着f[i]=min(f[i],f[j]+dis[j+1][i]*(i-j)+k)  其中i-j是天数,j是枚举的从哪天开始换路线。

  最后f[n]即是答案。

  放上代码

  

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<cctype>
#include<algorithm>inline int read(){int num=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')    f=-1;ch=getchar();}while(isdigit(ch)){num=num*10+ch-'0';ch=getchar();}return num*f;
}using namespace std;
queue <int>    q;
bool vis[100200];
int dst[1500];
int dis[150][150];
int n,m,o,e;int ext[30][150];struct Edge{int next,to,val;
}edge[1000200];
int head[12000],num;
inline void add(int from,int to,int val){edge[++num]=(Edge){head[from],to,val};head[from]=num;
}void Spfa(int s,int t){q.push(1);memset(dst,127/3,sizeof(dst));dst[1]=0;while(!q.empty()){int from=q.front();    q.pop();vis[from]=0;for(int i=head[from];i;i=edge[i].next){int to=edge[i].to;if(ext[to][t]-ext[to][s-1]>0)    continue;if(dst[to]>dst[from]+edge[i].val){dst[to]=dst[from]+edge[i].val;if(vis[to])    continue;q.push(to);    vis[to]=1;}}}dis[s][t]=dst[m];
}long long f[2000];int main(){memset(f,127/3,sizeof(f));memset(dis,127/3,sizeof(dis));n=read(),m=read(),o=read(),e=read();f[0]=-o;for(int i=1;i<=e;++i){int from=read(),to=read(),val=read();add(from,to,val);add(to,from,val);}int T=read();for(int i=1;i<=T;++i){int x=read(),a=read(),b=read();for(int j=a;j<=b;++j)    ext[x][j]=1;}for(int i=1;i<=m;++i)for(int j=1;j<=n;++j)    ext[i][j]+=ext[i][j-1];for(int i=1;i<=n;++i)for(int j=i;j<=n;++j)Spfa(i,j);for(int i=1;i<=n;++i)for(int j=0;j<i;++j){if(dis[j+1][i]==dis[0][0])    continue;f[i]=min(f[i],f[j]+dis[j+1][i]*(i-j)+o);}printf("%d",f[n]);return 0;
}

转载于:https://www.cnblogs.com/cellular-automaton/p/7891281.html

【luogu】P1772物流运输(最短路+DP)相关推荐

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

    思路:最短路+DP 提交:1次 题解: $f[i]$表示到第$i$天的最小代价,我们可以预先处理出$i,j$两天之间(包括$i,j$)都可通行的最短路的代价记做$s[i][j]$,然后有$f[i]=m ...

  2. 【bzoj1003】[ZJOI2006]物流运输 最短路+dp

    传送门:嘿原题在这 题意:给出一个图,求1-m的最短路,但其中有些点在某些时间段会不能用,题目保证有解. 我们可以很(不)容易的看出递推关系式dp[i]=min(dp[i],dp[j]+cost[j+ ...

  3. BZOJ 1003 物流运输 最短路+dp

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1003 题目大意: 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才 ...

  4. bzoj1003 [ZJOI2006]物流运输(最短路+dp)

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

  5. 1003. [ZJOI2006]物流运输【区间DP+最短路】

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

  6. BZOJ 1003 物流运输trans dijstra+dp

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1003 题意: 题解: 首先我们必须机智的知道f[i]=min(f[i],f[j]+cos ...

  7. P1772 [ZJOI2006]物流运输(线性dp+最短路径)

    P1772 [ZJOI2006]物流运输 题意 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头 A 运到码头 B.由于货物量比较大,需要 nnn 天才能运完.货物运输过程中一般要转 ...

  8. BZOJ1003 物流运输(dp+spfa)

    题目: 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 8000 Solved: 3343 [Submit][ ...

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

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

最新文章

  1. adoquery查询结果如何赋给一个变量(delphi和c++ builder)
  2. ubuntu 安装ndk
  3. 深入理解javascript原型和闭包(10)——this
  4. Golang——Tag、自定义类型、未命名类型
  5. in会让mysql索引失效吗_mysql的in会不会让索引失效?
  6. 小玉买文具(洛谷-P1421)
  7. hdoj1290切球形蛋糕(递推和划分问题)
  8. LevelDB源码分析之四:AtomicPointer
  9. bt服务器搭建 linux_linux系统架设BT服务器的详细教程
  10. HanLP自然语言处理包开源
  11. Python编程:从入门到时间 第五、六章学习笔记
  12. 解决训练时显存不断增大问题
  13. 3DMax2014试用结束后激活教程
  14. 连接服务器没有发挥作用,iPhone“连到系统上的设备没有发挥作用”原因分析及解决方法...
  15. OPencv无损保存图片
  16. html设置字段只读,html怎么设置只读
  17. win7系统如何备份还原,win7系统映像备份与恢复
  18. Microsoft Office Word 2010-2016中公式不能自动斜体的解决方法
  19. BI平台:怎么进行报表的开发和搭建
  20. vue将页面html导出为pdf

热门文章

  1. JavaScript浏览器对象Window对象常用方法(3)
  2. 计算一个连通分量中节点的个数的两种方法
  3. 下拉框怎么获取label_拼多多-「关键词自然流量快速获取」访客暴涨秘诀
  4. 2016蓝桥杯C++A:网友年龄
  5. Unity3D基础35:五彩砖块
  6. nlogn最长单调递增
  7. [debug] 延长Linux中sudo密码在终端的有效时间
  8. [paper reading] RetinaNet
  9. Git使用-.gitignore文件(使一些文件不上传到git)
  10. python批量实现将文件夹内的每张图片分割成多张