BZOJ.1003.[ZJOI2006]物流运输(DP 最短路Dijkstra)
容易看出是个最短路+DP。既然答案和天数有关,那么就令\(f[i]\)表示前\(i\)天最小成本。
这个转移很好想: \(f[i]=\min(f[i],\ f[j]+cost(j+1,i)+K)\),\(cost(j+1,i)\)即第\(j+1\)天到第\(i\)天(使用同一道路)所需花费,即最短路,这个可以预处理出来。
注意是否可行的判断。
//880kb	88ms
//好像很吉利啊
#include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
#define pr std::pair<int,int>
#define mp std::make_pair
const int N=23,M=900,INF=0x3f3f3f3f;//边数n*n啊。。
int d,n,K,m,Enum,H[N],nxt[M],to[M],len[M],cost[102][102],dis[N],f[102];
bool vis[N],can_t[N][102];
std::priority_queue<pr> q;
inline int read()
{
	int now=0;register char c=gc();
	for(;!isdigit(c);c=gc());
	for(;isdigit(c);now=now*10+c-'0',c=gc());
	return now;
}
inline void AddEdge(int u,int v,int w)
{
	to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum, len[Enum]=w;
	to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum, len[Enum]=w;
}
inline bool Judge(int x,int u,int v){
//	return st[x]>v||ed[x]<u;//WA:可能有多段!有毒!
	for(int i=u; i<=v; ++i) if(can_t[x][i]) return 0;
	return 1;
}
int Dijkstra(int a,int b)
{
	memset(vis,0,sizeof vis);
	memset(dis,0x3f,sizeof dis);
	while(!q.empty()) q.pop();
	dis[1]=0, q.push(mp(0,1));
	while(!q.empty())
	{
		int x=q.top().second;q.pop();
		if(x==n) return dis[n]*(b-a+1);
		if(vis[x]) continue;
		vis[x]=1;
		for(int v,i=H[x]; i; i=nxt[i])
			if(!vis[v=to[i]] && Judge(v,a,b) && dis[v]>dis[x]+len[i])
				dis[v]=dis[x]+len[i], q.push(mp(-dis[v],v));
	}
	return INF;
}
int main()
{
	d=read(),n=read(),K=read(),m=read();
	int u,v;
	while(m--) u=read(),v=read(),AddEdge(u,v,read());
	int t=read(),p;
	while(t--){
		p=read(),u=read(),v=read();
		for(int i=u; i<=v; ++i) can_t[p][i]=1;
	}
	for(int i=1; i<=d; ++i)
		for(int j=i; j<=d; ++j)
		{
			cost[i][j]=Dijkstra(i,j);
			if(cost[i][j]==INF){
				for(int k=j+1; k<=d; ++k) cost[i][k]=INF;
				break;
			}
		}
	for(int i=1; i<=d; ++i) f[i]=cost[1][i];
	for(int i=2; i<=d; ++i)
		for(int j=i-1; j; --j)
			if(cost[j+1][i]<INF)//注意INF的判断。
				f[i]=std::min(f[i],f[j]+cost[j+1][i]+K);
			else break;
	printf("%d",f[d]);
	return 0;
}
BZOJ.1003.[ZJOI2006]物流运输(DP 最短路Dijkstra)的更多相关文章
- BZOJ 1003: [ZJOI2006]物流运输trans(最短路+dp)
		1A,爽! cost[i][j]表示从第i天到第j天不改路线所需的最小花费,这个可以用最短路预处理出.然后dp(i)=cost[j][i]+dp(j-1)+c. c为该路线的花费. --------- ... 
- bzoj 1003 [ZJOI2006]物流运输(最短路+dp)
		[ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 8973 Solved: 3839[Submit][Status][Di ... 
- BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
		Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: ... 
- BZOJ 1003  [ZJOI2006]物流运输trans
		1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4242 Solved: 1765[Submit] ... 
- BZOJ 1003: [ZJOI2006]物流运输trans DP+最短路
		Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ... 
- BZOJ 1003: [ZJOI2006]物流运输(spfa+dp)
		http://www.lydsy.com/JudgeOnline/problem.php?id=1003 题意: 思路: 首先用spfa计算一下任意两天之内的最短路,dis[a][b]表示的就是在第a ... 
- BZOJ 1003 [ZJOI2006]物流运输trans ★(Dijkstra + DP)
		题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1003 思路 先Dijkstra暴力求出i..j天内不变换路线的最少花费,然后dp[i] = ... 
- BZOJ 1003 [ZJOI2006]物流运输trans SPFA+DP
		题意:链接 方法:SPFA+DP 解析:挺好的题目.因为数据范围较小所以用这样的方式能够搞,只是也是挺不好想的. 我们定义cost(i,j)表示从第i天走到第j天运用同一种方式的最小花费,然后因为数据 ... 
- 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 ... 
随机推荐
- SQL记录-PLSQL事务
			PL/SQL事务 数据库事务是一个工作的原子单元,其可以由一个或多个相关的SQL语句组成.所谓的原子性就是数据库的修改所带来的构成事务的SQL语句可以集体被提交,即永久到数据库或从数据库中(撤消) ... 
- PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)
			一.大体流程图 二.PHP 项目文件加密 下表列出了Zend产品中的PHP版本及其内部API版本和Zend产品版本. 如何加密请往后看 三.如何使用 第一步:确认当前环境 Amai Phalcon 前 ... 
- Struts2_day02
			一.内容大纲 1 结果页面配置 (1)全局结果页面 (2)局部结果页面 - 配置全局也配置局部,最终局部为准 (3)result标签type属性 - 默认值 dispatcher做转发 - redir ... 
- kombu源码Producer收获一
			celery内置了kombu库,看了一下kombu的源码,从官网最简单的一个例子来分析---消息发布,源码如下: from __future__ import absolute_import, uni ... 
- 【51Nod】1273 旅行计划 树上贪心
			[题目]51Nod 1273 旅行计划 [题意]给定n个点的树和出发点k,要求每次选择一个目的地旅行后返回,使得路径上未访问过的点最多(相同取编号最小),旅行后路径上所有点视为访问过,求旅行方案.\( ... 
- 20155236 2016-2017-2 《Java程序设计》第八周学习总结
			20155236 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 通用API 日志 1.日志API简介:java.util.logging包中提供了日志功能相 ... 
- 八、mini2440裸机程序之UART(1)简单介绍【转】
			转自:http://blog.csdn.net/shengnan_wu/article/details/8298869 一.概述 S3C2440通用异步接收和发送(UART)提供了三 ... 
- mysqldump只导出表结构或只导出数据的实现方法【转】
			mysql mysqldump 只导出表结构 不导出数据 mysqldump --opt -d 数据库名 -u root -p > xxx.sql 备份数据库 #mysqldump 数据库名 & ... 
- 06 Go 1.6 Release Notes
			Go 1.6 Release Notes Introduction to Go 1.6 Changes to the language Ports Tools Cgo Compiler Toolcha ... 
- 原生js实现ajax跨域(兼容IE8,IE9)
			html设置meta标签兼容360兼容模式和IE怪异模式 <meta http-equiv="X-UA-Compatible" content="IE=9;IE=8 ... 
