【动态规划】【spfa】【最短路】bzoj1003 [ZJOI2006]物流运输trans

预处理cost[a][b] 表示第a天到第b天用同一条线路的成本。

具体转移看代码。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
#define N 21
typedef long long ll;
#define M 401
int n,m,K,day;
int v[M<<1],first[N],next[M<<1],w[M<<1],en,cost[101][101],f[101];
bool cant[N][101][101];
void AddEdge(int U,int V,int W)
{
	v[++en]=V;
	w[en]=W;
	next[en]=first[U];
	first[U]=en;
}
queue<int>q;
bool inq[N];
int dis[N];
void spfa(int from,int to)
{
	memset(inq+1,0,sizeof(bool)*n);
	memset(dis+1,0x7f,sizeof(int)*n);
	q.push(1); inq[1]=1; dis[1]=0;
	while(!q.empty())
	  {
	  	int U=q.front();
	  	for(int i=first[U];i;i=next[i])
	  	  if((!cant[v[i]][from][to])&&(ll)dis[v[i]]>(ll)dis[U]+(ll)w[i])
	  	    {
	  	      dis[v[i]]=dis[U]+w[i];
	  	      if(!inq[v[i]])
	  	        {
	  	          q.push(v[i]);
	  	          inq[v[i]]=1;
	  	        }
	  	    }
		q.pop(); inq[U]=0;
	  }
}
int main()
{
	int x,y,z,P;
	scanf("%d%d%d%d",&day,&n,&K,&m);
	for(int i=1;i<=m;++i)
	  {
	  	scanf("%d%d%d",&x,&y,&z);
	  	AddEdge(x,y,z);
	  	AddEdge(y,x,z);
	  }
	scanf("%d",&P);
	for(;P;--P)
	  {
	  	scanf("%d%d%d",&x,&y,&z);
	  	for(int i=1;i<=z;++i)
	  	  for(int j=max(y,i);j<=day;++j)
	  	    cant[x][i][j]=1;
	  }
	for(int i=1;i<=day;++i)
	  for(int j=i;j<=day;++j)
	    {
	      spfa(i,j);
	      cost[i][j]=dis[n]*(dis[n]>2000000000?1:(j-i+1));
	    }
	memset(f+1,0x7f,sizeof(int)*day);
	for(int i=0;i<=day;++i)
	  for(int j=i+1;j<=day;++j)
	    f[j]=(int)min((ll)f[j],(ll)f[i]+(ll)(i==0?0:K)+(ll)cost[i+1][j]);
	printf("%d\n",f[day]);
	return 0;
}

  

时间: 2024-10-16 18:41:16

【动态规划】【spfa】【最短路】bzoj1003 [ZJOI2006]物流运输trans的相关文章

BZOJ1003 ZJOI2006物流运输trans 0&#39;

Description物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因素的存在,有的时候某个码头会无法装卸货物.这时候就必须修改运输路线,让货物能够按时到达目的地.但是修改路线是一件十分麻烦的事情,会带来额外的成本.因此物流公司希望能够订一个n天的运输计划,使得总成本尽可能地小.Input第一行是四个整数n(1<=n<=100).m(1<

bzoj 1003: [ZJOI2006]物流运输trans 最短路+dp

题目链接 1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5246  Solved: 2157[Submit][Status][Discuss] Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因素的存在,有的时候某个码头会无

BZOJ 1003: [ZJOI2006]物流运输trans

二次联通门 : BZOJ 1003: [ZJOI2006]物流运输trans /* BZOJ 1003: [ZJOI2006]物流运输trans Spfa + Dp Spfa预处理出i到j天的最小花费 然后N^2 dp即可 */ #include <cstdio> #include <iostream> #include <cstring> #include <queue> #define INF 1e6 const int BUF = 12312313;

spfa最短路+DP BZOJ1003 [ZJOI2006] 物流运输

1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7935  Solved: 3316[Submit][Status][Discuss] Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转 停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种 因素的存在,有的时候某个码头会无法装卸货物.这时

BZOJ 1003 ZJOI2006 物流运输trans 动态规划+SPFA

题目大意:给定一个无向图,运输n天,其中有些天有些点不能走,更换路线代价为k,求代价总和 首先令cost[i][j]为第i天到第j天都走同一路线的最小花销 这个用SPFA处理 然后就是动规的问题了 令f[i]为1~i天的最小花销 则f[i]=min{ f[j]+cost[j+1][i]+k } ( 0<=j<i ) 注意m和n别写反 乘天数之前要特判是不是正无穷 #include<cstdio> #include<cstring> #include<iostrea

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

Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因素的存在,有的时候某个码头会无法装卸货物.这时候就必须修改运输路线,让货物能够按时到达目的地.但是修改路线是一件十分麻烦的事情,会带来额外的成本.因此物流公司希望能够订一个n天的运输计划,使得总成本尽可能地小. Input 第一行是四个整数n(1<=n<=100).m(1&

bzoj1003: [ZJOI2006]物流运输

dp. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 100 + 10; const int maxm = 2000 + 10; const int maxv = 20 + 10; const int INF = 0x3f3f3f3f; int g[maxn],v[maxm],next[maxm],d[maxm],eid; bool

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

原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1003 题解: dp就好,令dp[i]表示第i天的答案,那么dp[i]=min{Cost(1,i),Cost(j+1,i)+dp[j]+K},其中Cost(i,j)表示从i到j都用同一种方案.这种dp和划分问题很类似. 代码: #include<iostream> #include<cstring> #include<algorithm> #include<

【BZOJ 1003】 [ZJOI2006]物流运输trans

Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因素的存在,有的时候某个码头会无法装卸货物.这时候就必须修改运输路线,让货物能够按时到达目的地.但是修改路线是一件十分麻烦的事情,会带来额外的成本.因此物流公司希望能够订一个n天的运输计划,使得总成本尽可能地小. Input 第一行是四个整数n(1<=n<=100).m(1&