BZOJ 1497 最大权闭合子图
2016-12-27 09:15
369 查看
这算比较裸的一道最大权闭合子图了,从源点向每个用户连一条容量为收益的边,每个用户向自己用的通讯站连一条INF,每个通讯站向汇点连一条修建费用的流,所有收益减去最小割就好啦
#include<cstdio> #include<cstdlib> #include<cmath> #include<ctime> #include<string> #include<cstring> #include<iostream> #include<iomanip> #include<algorithm> #define INF 1000000000 using namespace std; struct bian { int r,f; }a[2000000]; int tot=1; int d[1000000]; int fir[2000000]; int nex[2000000]; int s,t; void add_edge(int l,int r,int f) { a[++tot].r=r; a[tot].f=f; nex[tot]=fir[l]; fir[l]=tot; } bool bfs() { static int dui[1000000]; int top=1,my_final=2; memset(d,-1,sizeof(d)); d[s]=0; dui[top]=s; while(top<my_final) { int u=dui[top]; for(int o=fir[u];o!=0;o=nex[o]) { if(d[a[o].r]!=-1 || !a[o].f) continue; dui[my_final++]=a[o].r; d[a[o].r]=d[u]+1; if(a[o].r==t) return true; } top++; } return false; } int dinic(int u,int flow) { if(u==t) return flow; int left=flow; for(int o=fir[u];o!=0&&left;o=nex[o]) { if(d[a[o].r]==d[u]+1 && a[o].f) { int temp=dinic(a[o].r,min(left,a[o].f)); if(temp==0) d[a[o].r]=-1; left-=temp; a[o].f-=temp; a[o^1].f+=temp; } } return flow-left; } int main() { int n,m; scanf("%d%d",&m,&n); s=0;t=999999; for(int i=1;i<=m;i++) { int x; scanf("%d",&x); add_edge(n+i,t,x); add_edge(t,n+i,0); } int ans=0; for(int i=1;i<=n;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); ans+=z; add_edge(s,i,z); add_edge(i,s,0); add_edge(i,n+x,INF); add_edge(n+x,i,0); add_edge(i,n+y,INF); add_edge(n+y,i,0); } while(bfs()) ans-=dinic(s,INF); cout<<ans; return 0; }
相关文章推荐
- 【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割
- BZOJ 1497 最大获利(最大权闭合子图)
- 【最大权闭合子图】BZOJ1497[NOI2006]-最大获利
- bzoj1497 [ NOI2006 ] --最大权闭合子图
- hdu 3879 Base Station bzoj 1497 最大获利问题 最大权闭合子图
- _bzoj1497 [NOI2006]最大获利【最大权闭合子图】
- bzoj 1497: [NOI2006]最大获利-----------算法模板[最大权闭合子图]&省选计划系列
- [BZOJ 1497][NOI 2006]最大获利(最大权闭合子图)
- [BZOJ1497][NOI2006]最大获利(最大权闭合子图)
- bzoj 1497 [NOI2006]最大获利【最大权闭合子图+最小割】
- [BZOJ1497] 最大权闭合子图+最小割+最大流
- BZOJ 1497: [NOI2006]最大获利 最大权闭合子图
- 【BZOJ1497】【codevs1789】最大获利,网络流之最大权闭合子图
- bzoj 1497(最小割,最大权闭合子图)
- BZOJ 1497 [NOI2006]最大获利 最大权闭合子图
- 【BZOJ 1497】 [NOI2006]最大获利 最大权闭合子图
- 【最大权闭合子图/最小割】BZOJ3438-小M的作物【待填】
- [bzoj1497][NOI2006]最大获利 最大闭合权子图
- 【BZOJ 3438】小M的作物 最大权闭合子图
- 1497: [NOI2006]最大获利(最大权闭合子图)