BZOJ 1003: [ZJOI2006]物流运输(spfa+dp)
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)的更多相关文章
- BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: ...
- BZOJ 1003: [ZJOI2006]物流运输trans DP+最短路
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...
- BZOJ 1003: [ZJOI2006]物流运输trans(最短路+dp)
1A,爽! cost[i][j]表示从第i天到第j天不改路线所需的最小花费,这个可以用最短路预处理出.然后dp(i)=cost[j][i]+dp(j-1)+c. c为该路线的花费. --------- ...
- BZOJ 1003 [ZJOI2006]物流运输trans
1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4242 Solved: 1765[Submit] ...
- bzoj 1003 [ZJOI2006]物流运输(最短路+dp)
[ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 8973 Solved: 3839[Submit][Status][Di ...
- 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 ...
- BZOJ 1003 [ZJOI2006]物流运输trans ★(Dijkstra + DP)
题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1003 思路 先Dijkstra暴力求出i..j天内不变换路线的最少花费,然后dp[i] = ...
- BZOJ.1003.[ZJOI2006]物流运输(DP 最短路Dijkstra)
题目链接 容易看出是个最短路+DP.既然答案和天数有关,那么就令\(f[i]\)表示前\(i\)天最小成本. 这个转移很好想: \(f[i]=\min(f[i],\ f[j]+cost(j+1,i)+ ...
随机推荐
- decltype类型声明- 现代C++新特性总结
decltype类型声明 有时会遇到这样的情况:希望从表达式的类型推断出要定义的变量的类型,但不想用该表达式的值去初始化变量.为了满足这一需求,C++11引入了decltype,它的作用是选择并返回操 ...
- Linux文本编辑器快捷方式
- [LeetCode] 851. Loud and Rich_ Medium tag: DFS
In a group of N people (labelled 0, 1, 2, ..., N-1), each person has different amounts of money, and ...
- (C#) SQLite数据库连接字符串
最常用的:Data Source=filename;Version=3; 自增主键: Create test1( [id] integer PRIMARY KEY AUTOINCREMENT ,[n ...
- linux mail 发送邮件附件
在很多场景中我们会使用Shell命令来发送邮件,而且我们还可能在邮件里面添加附件,本文将介绍使用Shell命令发送带附件邮件的几种方式,希望对大家有所帮助. 文章目录 1 使用mail命令 2 使用m ...
- c# 获取某个进程的CPU使用百分百(类似任务管理器中显示CPU)
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- eclipse设置字体、字符编码、快捷键
1.设置字体: preferences->general->appearnce->colors and fonts->edit->字体大小14,字形常规,字体Consol ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON FastThreshold1
zw版[转发·台湾nvp系列Delphi例程]HALCON FastThreshold1 procedure TForm1.Button1Click(Sender: TObject);var img ...
- Learning to Rank算法介绍:RankSVM 和 IR SVM
之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to R ...
- js 技巧(智能社教程温故)
1.js 中 NaN === NaN 值为false; 2.parseInt("abc") === NaN;(不是数字) 3.tab 纯js 实现.可以给当前循环的元素添加.i ...