[BZOJ1834][ZJOI2010]network 网络扩容
2015-07-20 18:03
537 查看
原题地址
最大流+最小费用流.
AC code:
最大流+最小费用流.
AC code:
#include <cstdio> const int N=10010; const int M=50010; const int INF=1<<28; int n,m,k,S,T,cnt=1,he,ta,mcf,mcost; int head ,Q ,d ,cur ,mina ,last ,num ,minf ; bool inq ; struct Edge{ int v,f,a,next; Edge() {} Edge(int v,int f,int a,int next):v(v),f(f),a(a),next(next) {} }E[M]; int Min(int x,int y){ return x<y?x:y; } void addedge(int u,int v,int c,int a){ E[++cnt]=Edge(v,c,a,head[u]); E[++cnt]=Edge(u,0,-a,head[v]); head[u]=cnt-1;head[v]=cnt; } void read(){ scanf("%d%d%d",&n,&m,&k); S=1;T=n; for(int i=1;i<=m;i++){ int u,v,c,a; scanf("%d%d%d%d",&u,&v,&c,&a); addedge(u,v,c,a); } } int BFS(){ he=0;ta=1;Q[0]=S; for(int i=1;i<=T;i++){ d[i]=0;cur[i]=head[i]; } while(he!=ta){ int x=Q[he++]; if(he==1001) he=0; for(int i=head[x];i;i=E[i].next){ Edge e=E[i]; if(e.v==S||d[e.v]||(!e.f)) continue; d[e.v]=d[x]+1; Q[ta++]=e.v; if(ta==1001) ta=0; } } return d[T]; } int DFS(int x,int a){ if(x==T||(!a)) return a; int flow,tag=0; for(int &i=cur[x];i;i=E[i].next){ Edge e=E[i]; if(d[x]+1!=d[e.v]||(!e.f)) continue; flow=DFS(e.v,Min(a-tag,e.f)); tag+=flow; E[i].f-=flow; E[i^1].f+=flow; if(!(a-tag)) break; } return tag; } void Dinic(){ int mxf=0; while(BFS()) mxf+=DFS(S,INF); printf("%d ",mxf); } bool SPFA(){ he=ta=0;Q[0]=S;minf[S]=INF; for(int i=2;i<=T;i++) mina[i]=INF; while(he!=ta+1){ int x=Q[he++]; inq[x]=0; if(he==1001) he=0; for(int i=head[x];i;i=E[i].next){ Edge e=E[i]; if(e.v==S||(!e.f)||mina[x]+e.a>=mina[e.v]) continue; num[e.v]=i; last[e.v]=x; mina[e.v]=mina[x]+e.a; minf[e.v]=Min(minf[x],e.f); if(!inq[e.v]){ inq[e.v]=1; Q[++ta]=e.v; if(ta==1001) ta=0; } } } if(mcf+minf[T]>=k){ mcost+=mina[T]*(k-mcf); return 0; } for(int i=T;i!=S;i=last[i]) E[num[i]].f-=minf[T]; mcf+=minf[T];mcost+=mina[T]*minf[T]; return 1; } int main(){ read(); Dinic(); for(int i=1;i<=T;i++){ for(int j=head[i];j;j=E[j].next){ if(E[j].a>0){ if(E[j].f) addedge(i,E[j].v,E[j].f,0); E[j].f=INF; } else E[j].a=0; } } while(SPFA()); printf("%d",mcost); return 0; }
相关文章推荐
- 用iperf测试网络丢包和延迟
- android 判断网络是否连接 通过NetworkInfo
- 浅谈网络语音技术
- ubuntu中tinyos的安装
- Http和Https下的cookie(cookie 无法写入浏览器)
- http://blog.sina.com.cn/s/blog_877e9c3c0101gpnz.html
- 计算机网络(自顶向下的方法)学习笔记 1.2 网络边缘
- Nginx重要结构request_t解析之http请求的获取
- 在Windows如何解决下Cocos2d-x示例代码TestCpp我找不到lib问题库文件
- HttpServletRequest对象方法的用法
- mvc中HttpPost理解
- Github 主页:https://github.com/RunningYoung
- C# Socket的TCP通讯
- windows能连网络,但是打不开网页,出现无法解析服务器的DNS
- 解决Expected MultipartHttpServletRequest: is a MultipartResolver configured问题。
- vmware 网络连接
- TCP协议三次握手过程分析(转载)
- ASP.Net核心对象HttpRequest
- 初学Http的冷知识
- 使用httpClient模拟登陆开心网过程中登陆成功但是跳转不成功