bzoj1003 [ZJOI2006]物流运输(spfa+dp)
2017-09-06 15:32
357 查看
dp[i]=min{dp[j]+w[j+1][i]+K |1<=j< i}.w[i][j]表示i~j天不改变航线的最短路,用spfa求出。
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> #define ll long long #define N 21 #define M 200 #define inf 0x3f3f3f3f inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int n,m,K,e,h ,num=0,d ,w[105][105]; ll dp[ 4000 105]; bool broke [105],exist ,f ; struct edge{ int to,next,v; }data[M<<1]; int spfa(int s,int t){ memset(f,0,sizeof(f));memset(d,0x3f,sizeof(d)); for(int i=1;i<=m;++i) exist[i]=1; for(int i=1;i<=m;++i) for(int j=s;j<=t;++j) if(broke[i][j]) exist[i]=0; std::queue<int>q; q.push(1);f[1]=1;d[1]=0; while(!q.empty()){ int x=q.front();q.pop();f[x]=0; for(int i=h[x];i;i=data[i].next){ int y=data[i].to; if(!exist[y]) continue; if(d[x]+data[i].v<d[y]){ d[y]=d[x]+data[i].v; if(!f[y]) q.push(y),f[y]=1; } } } return d[m]; } int main(){ // freopen("a.in","r",stdin); n=read();m=read();K=read();e=read(); while(e--){ int x=read(),y=read(),v=read(); data[++num].to=y;data[num].next=h[x];h[x]=num;data[num].v=v; data[++num].to=x;data[num].next=h[y];h[y]=num;data[num].v=v; } e=read(); while(e--){ int x=read(),s=read(),t=read(); for(int i=s;i<=t;++i) broke[x][i]=1; } for(int i=1;i<=n;++i) for(int j=i;j<=n;++j) w[i][j]=spfa(i,j);//i~j天不改变航线的最短路 for(int i=1;i<=n;++i){ dp[i]=(ll)w[1][i]*i; for(int j=1;j<i;++j) dp[i]=std::min(dp[i],dp[j]+K+(ll)w[j+1][i]*(i-j)); } printf("%lld\n",dp ); return 0; }
相关文章推荐
- [BZOJ 1003][ZJOI2006]物流运输(SPFA+dp)
- BZOJ 1003: [ZJOI2006]物流运输trans SPFA+DP
- BZOJ-1003-物流运输trans-ZJOI2006-SPFA+DP
- 【DP+SPFA】【ZJOI2006】【bzoj1003】【cogs1824】物流运输trans
- BZOJ 1003([ZJOI2006]物流运输trans-SPFA+DP)
- BZOJ-1003-物流运输trans-ZJOI2006-SPFA+DP
- bzoj 1003: [ZJOI2006]物流运输【spfa+dp】
- 【bzoj1003】【Dp+Spfa】[ZJOI2006]物流运输
- [BZOJ1003][ZJOI2006]物流运输(spfa+dp)
- 【BZOJ 1003】[ZJOI2006]物流运输 【SPFA+DP】
- bzoj 1003 [ZJOI2006]物流运输(最短路spfa+dp)
- 【BZOJ】1003: [ZJOI2006]物流运输trans(SPFA+DP)
- [BZOJ 1003][ZJOI2006]物流运输:DP+SPFA
- BZOJ 1003 [ZJOI2006]物流运输trans SPFA+DP
- BZOJ 1003: [ZJOI2006]物流运输(spfa+dp)
- BZOJ1003: [ZJOI2006]物流运输 Spfa+DP
- BZOJ 1003([ZJOI2006]物流运输trans-SPFA+DP)
- bzoj 1003: [ZJOI2006]物流运输(spfa+dp)
- BZOJ 1003: [ZJOI2006]物流运输trans DP+SPFA
- BZOJ 1003: [ZJOI2006]物流运输(spfa+dp)