loj6223「网络流 24 题」汽车加油行驶问题(分层图spfa)
2017-12-17 22:27
423 查看
dis(x,y,k)表示到点(x,y),剩余油量为k的最小距离。然后分层图spfa即可。注意油量为0时正好到达终点也是可以的。
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 110010 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,K,A,B,C,id[110][110][11],h ,num=1,dis ,tot=0,T=110001; int dx[]={0,0,1,-1},dy[]={1,-1,0,0}; bool mp[110][110],inq ; struct edge{ int to,next,val; }data[N<<3]; inline void add(int x,int y,int val){ data[++num].to=y;data[num].next=h[x];h[x]=num;data[num].val=val; } inline void spfa(){ queue<int>q;memset(dis,inf,sizeof(dis)); q.push(id[1][1][K]);dis[id[1][1][K]]=0;inq[id[1][1][K]]=1; while(!q.empty()){ int x=q.front();q.pop();inq[x]=0; for(int i=h[x];i;i=data[i].next){ int y=data[i].to; if(dis[x]+data[i].val<dis[y]){ dis[y]=dis[x]+data[i].val; if(!inq[y]) q.push(y),inq[y]=1; } } } } int main(){ // freopen("a.in","r",stdin); n=read();K=read();A=read();B=read();C=read(); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) mp[i][j]=read(); for(int k=0;k<=K;++k) for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) id[i][j][k]=++tot; for(int i=1;i<=K;++i) for(int x=1;x<=n;++x) for(int y=1;y<=n;++y){ if(mp[x][y]&&i!=K) continue; if(x==1&&y==1&&i!=K) continue; for(int k=0;k<4;++k){ int xx=x+dx[k],yy=y+dy[k],res=0; if(xx<1||xx>n||yy<1||yy>n) continue; if(k&1) res+=B; if(mp[xx][yy]) add(id[x][y][i],id[xx][yy][K],res+A); else{ add(id[x][y][i],id[xx][yy][i-1],res); add(id[x][y][i],id[xx][yy][K],res+A+C); } } } for(int i=0;i<=K;++i) add(id [i],T,0); spfa();printf("%d\n",dis[T]); return 0; }
相关文章推荐
- [网络流24题] 汽车加油行驶问题
- 【网络流24题】 No.15 汽车加油行驶问题 (分层图最短路i)
- 网络流24题 之十五 汽车加油行驶问题 分层图
- 【网络流24题----15】汽车加油行驶问题
- 【网络流24题】汽车加油行驶问题
- 【网络流24题】汽车加油行驶问题(最短路)
- 【线性规划与网络流24题】汽车加油行驶问题 分层图
- 【线性规划与网络流24题】汽车加油行驶问题 分层图
- cogs 737. [网络流24题] 汽车加油行驶
- 【网络流24题15】汽车加油行驶问题
- 【网络流24题】汽车加油行驶
- 【网络流24题】汽车加油行驶(分层图+最短路)
- 网络流24题15. 汽车加油行驶问题
- 网络流24题之T15 汽车加油行驶问题
- [网络流24题-15] 汽车加油行驶 - 分层图
- 【网络流24题】汽车加油行驶 最短路
- 洛谷 P4009 汽车加油行驶问题 【最小费用最大流】
- [CODEVS1912] 汽车加油行驶问题(分层图最短路)
- 洛谷P4009:汽车加油行驶问题
- 洛谷P4009 汽车加油行驶问题(分层最短路)