BZOJ2324: [ZJOI2011]营救皮卡丘
2016-12-23 15:46
381 查看
题目链接
(很烦,很燥。数组开小了调了我一个半小时。心态崩了)
学习一下别人的建图:http://www.cnblogs.com/BLADEVIL/p/3473628.html
(很烦,很燥。数组开小了调了我一个半小时。心态崩了)
学习一下别人的建图:http://www.cnblogs.com/BLADEVIL/p/3473628.html
【代码】
#include <cstdio> #include <iostream> #include <queue> #include <vector> #include <algorithm> #include <cstring> #include <cmath> #include <stack> #define N 355 #define M 300005 #define INF 1000000000 using namespace std; typedef long long ll; typedef pair<ll,ll> pa; int read() { int x=0,f=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();} while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();} return x*f; } int n,m,K,cnt=1,S,T,ans; int b[M],p ,nextedge[M],w[M],c[M]; int Dis ,Pre ,dis[155][155]; bool Flag ; void Add(int x,int y,int z,int cost) { cnt++; b[cnt]=y; nextedge[cnt]=p[x]; p[x]=cnt; w[cnt]=z; c[cnt]=cost; } void Anode(int x,int y,int z,int cost){ Add(x,y,z,cost);Add(y,x,0,-cost); } void Floyd() { for(int k=0;k<=n;k++) for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) if(i!=j) { if(dis[i][k]!=INF&&dis[k][j]!=INF) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); if(k==j&&i<j&&dis[i][j]!=INF) Anode(i,j+n,1,dis[i][j]); } } void Input_Init() { n=read(),m=read(),K=read();S=n<<1|1;T=S+1; for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) if(i!=j) dis[i][j]=INF; for(int i=1;i<=m;i++) { static int x,y,z; x=read(),y=read(),z=read(); if(dis[x][y]>z) dis[x][y]=dis[y][x]=z; } } void Build_Graph() { Anode(S,0,K,0); for(int i=1;i<=n;i++) { Anode(i+n,T,1,0); Anode(S,i,1,0); } Floyd(); } bool Bfs() { queue<int>q; q.push(S); for(int i=0;i<=T;i++) Dis[i]=INF; Dis[S]=0; while(!q.empty()) { int k=q.front();q.pop();Flag[k]=0; for(int i=p[k];i;i=nextedge[i]) { int v=b[i],f=w[i]; if(Dis[v]>Dis[k]+c[i]&&f) { Dis[v]=Dis[k]+c[i]; Pre[v]=i; if(!Flag[v]) { Flag[v]=1; q.push(v); } } } } return Dis[T]!=INF; } void Mcf() { int Maxf=INF; for(int i=Pre[T];i;i=Pre[b[i^1]]) Maxf=min(Maxf,w[i]); for(int i=Pre[T];i;i=Pre[b[i^1]]) { w[i]-=Maxf,w[i^1]+=Maxf; ans+=Maxf*c[i]; } } void MCF() { while(Bfs()) Mcf(); printf("%d\n",ans); } int main() { Input_Init(); Build_Graph(); MCF(); return 0; }
相关文章推荐
- bzoj 2324: [ZJOI2011]营救皮卡丘 费用流,最小路径覆盖DAG
- bzoj2324 [ZJOI2011]营救皮卡丘
- bzoj2324[ZJOI2011]营救皮卡丘
- [BZOJ2324][ZJOI2011]营救皮卡丘
- bzoj 2324: [ZJOI2011]营救皮卡丘
- 【bzoj2324】【ZJOI2011】【营救皮卡丘】【有上下界的费用流+Floyd】
- [bzoj2324][ZJOI2011]营救皮卡丘
- bzoj 2324 [ZJOI2011]营救皮卡丘(floyd,费用流)
- 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
- BZOJ2324 [ZJOI2011]营救皮卡丘 【费用流】
- 【ZJOI2011】bzoj2324 营救皮卡丘
- [BZOJ2324][ZJOI2011][最小费用最大流]营救皮卡丘
- BZOJ 2324: [ZJOI2011]营救皮卡丘
- BZOJ2324[ZJOI2011]营救皮卡丘
- BZOJ2324 [ZJOI2011]营救皮卡丘
- [省选前题目整理][BZOJ 2324][ZJOI 2011]营救皮卡丘(费用流)
- [最小权路径覆盖 & 网络流] BZOJ2324 :[ZJOI2011] 营救皮卡丘
- 【BZOJ 2324】[ZJOI2011]营救皮卡丘 费用流
- Bzoj2324 [ZJOI2011]营救皮卡丘
- BZOJ 2324: [ZJOI2011]营救皮卡丘( floyd + 费用流 )