2055: 80人环游世界|有上下界的费用流
2016-03-01 19:55
531 查看
做上下界网络流的题姿势水平还有待提高啊~
把每个国家拆成两个点Ai1,Ai2,限制这两个点之间的流量,让其上下界都为Vi
先建立超级源点S和超级汇点T
Ai1−>T,S−>Ai2流量都为Vi费用为零
在建立一个点s−>Ai1流量为无穷费用为零
S−>s流量为m费用为零
对于原图中的边i−>j连Ai2−>Aj1流量为无穷费用为原图的边权
然后跑最小费用最大流就是答案
把每个国家拆成两个点Ai1,Ai2,限制这两个点之间的流量,让其上下界都为Vi
先建立超级源点S和超级汇点T
Ai1−>T,S−>Ai2流量都为Vi费用为零
在建立一个点s−>Ai1流量为无穷费用为零
S−>s流量为m费用为零
对于原图中的边i−>j连Ai2−>Aj1流量为无穷费用为原图的边权
然后跑最小费用最大流就是答案
#include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector> #include<queue> #include<cmath> #include<set> #include<map> #define N 400006 #define mx 1011111111 using namespace std; int sc() { int i=0,f=1;char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i*f; } int dis ,mark ,from ,num ,q ; int head ,lst ,nxt ,c ,v ; int n,m,s,S,T,tot=1,ans; void insert(int x,int y,int a,int b) { lst[++tot]=y;nxt[tot]=head[x];head[x]=tot;c[tot]=a;v[tot]=b; lst[++tot]=x;nxt[tot]=head[y];head[y]=tot;c[tot]=0;v[tot]=-b; } bool spfa() { for(int i=1;i<=T;i++)dis[i]=mx; dis[q[1]=S]=0; for(int l=1,r=2;l!=r;l=(l+1)%N) { int x=q[l];mark[x]=0; for(int i=head[x];i;i=nxt[i]) if(c[i]&&dis[lst[i]]>dis[x]+v[i]) { dis[lst[i]]=dis[x]+v[i]; from[lst[i]]=x; num[lst[i]]=i; if(!mark[lst[i]]) mark[q[r]=lst[i]]=1,r=(r+1)%N; } } //cout << dis[T]<<endl; return dis[T]!=mx; } void mcf() { int w=mx; for(int i=T;i!=S;i=from[i]) w=min(w,c[num[i]]); for(int i=T;i!=S;i=from[i]) c[num[i]]-=w,c[num[i]^1]+=w; ans+=w*dis[T]; } int main() { n=sc(),m=sc();s=2*n+1,S=s+1,T=s+2; insert(S,s,m,0); for(int i=1;i<=n;i++) { int x=sc(); insert(s,i,mx,0); insert(i,T,x,0); insert(S,i+n,x,0); } for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { int x=sc(); if(x==-1)continue; insert(i+n,j,mx,x); } while(spfa())mcf(); cout<<ans; return 0; }
相关文章推荐
- Libcurl中配置openssl使其支持https
- Android中相机调用及将照片存储sd 实例,转自:http://android.tgbus.com/Android/tutorial/201204/419574.shtml
- java多线程下载网络资源(支持断点续传)
- 【转】HTTP响应头信息和请求头信息详解
- Http请求、Http响应、 Socket
- TCP长连接与短连接的区别
- tcp/ip协议学习笔记
- Winpcap网络编程九之Winpcap实战,ARP协议获得MAC表及主机通信
- 卷积神经网络(CNN)学习笔记
- tcpdump抓包工具
- iperf工具测试网络性能
- 如何理解HTTP协议的 “无连接,无状态” 特点?
- DOS下常用网络命令技巧
- android 请求网络异步载入
- 申请 SSL 证书 并且配置 iis 启用https协议
- http请求学习笔记
- wireshark抓包图解 TCP三次握手/四次挥手详解
- HttpApplication 类,HttpApplicationState 类
- 无线分布式网络
- Tomcat的HTTPS的配置