【BZOJ1497】【codevs1789】最大获利,网络流之最大权闭合子图
2016-05-04 07:16
537 查看
传送门1
传送门2
写在前面:困啊困╯﹏╰
思路:建立中转站的点和用户群的点,s连中转站,流量为其建立成本,用户群点连t,流量为其获利,中转站与其对应的用户群连流量为inf的边,直接跑最大流就可以了
注意:无
传送门2
写在前面:困啊困╯﹏╰
思路:建立中转站的点和用户群的点,s连中转站,流量为其建立成本,用户群点连t,流量为其获利,中转站与其对应的用户群连流量为inf的边,直接跑最大流就可以了
注意:无
#include<bits/stdc++.h> #define inf 0x7fffff using namespace std; int n,m,s,t,tot=1,ans; int first[55010],dis[55010],cur[55010]; struct edge { int u,v,w,next; }e[320000]; queue<int>q; int in() { int t=0;char ch=getchar(); while (!isdigit(ch)) ch=getchar(); while (isdigit(ch)) t=(t<<3)+(t<<1)+ch-48,ch=getchar(); return t; } void add(int x,int y,int z) {e[++tot]=(edge){x,y,z,first[x]};first[x]=tot;} bool bfs() { memset(dis,0,sizeof(dis)); q.push(s);dis[s]=1; while (!q.empty()) { int k=q.front();q.pop(); for (int i=first[k];i;i=e[i].next) if (e[i].w&&!dis[e[i].v]) q.push(e[i].v),dis[e[i].v]=dis[k]+1; } if (dis[t]) for (int i=s;i<=t;i++) cur[i]=first[i]; return dis[t]; } int dfs(int x,int maxn) { if (x==t) return maxn; int used=0; for(int i=cur[x];i;i=e[i].next) if (dis[e[i].v]==dis[x]+1) { int k=dfs(e[i].v,min(maxn-used,e[i].w)); e[i].w-=k;e[i^1].w+=k; if (e[i].w) cur[x]=i; used+=k; if (used==maxn) return maxn; } if (!used) dis[x]=0; return used; } main() { n=in();m=in(); t=n+m+1; int x,y,z; for (int i=1;i<=n;i++) add(s,i,in()),add(i,s,0); for (int i=1;i<=m;i++) x=in(),y=in(),z=in(),ans+=z, add(x,i+n,inf),add(i+n,x,0), add(y,i+n,inf),add(i+n,y,0), add(i+n,t,z),add(t,i+n,0); while (bfs()) ans-=dfs(s,inf); printf("%d",ans); }
相关文章推荐
- http笔记
- VMware中三种网络连接的区别
- Error: HttpServlet was not found on the Java
- 初识网络请求框架--OKHttp官方介绍
- 对于安卓开发中HttpURLConnection时的路径格式问题解决方案
- 小米路由器mini--OpenWrt刷机/adhoc网络配置/视频传输测试
- Vmware中OpenWrt15.05的网络连接设置
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包
- OpenCV进阶之路:神经网络识别车牌字符
- MATLAB处理神经网络基础练习
- 非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS及其他
- 使用AsyncHttpClient获取Session 问题汇总
- 3,Android通过https与服务器端进行通信
- Java获取网络上主机的IP地址
- 2,Android通过http协议数据交互
- iOS中https的网络请求的配置
- HTTP,TCP,UDP,SOCKET整理
- 1,网络开发必备的HTTP协议知识
- 给Android封装的一个简单网络请求框架
- TCP的复位报文段