【题意】给定n个点,点权为pi。m条边,边权为ci。选择一个点集的收益是在[点集中的边权和]-[点集点权和],求最大获利。n<=5000,m<=50000,0<=ci,pi<=100。

【算法】最大权闭合子图 或 最小割

【题解】网络流的复杂度是假的233大胆地写吧。

把边视为连向端点的点,就是最大权闭合子图了。

重点讲一下Amber论文中的最小割模型。

设$d_v$表示点v的邻边边权和,$g$表示一端选一端不选的边权和(即点集和其他点的割),那么:

$$2ans=-(-\sum_v d_v+g+2*\sum_v p_v)$$

为了方便求最小割,我们在右边整体加了个负号,这样我们就是求括号内的最小值了。

在网络流图中,对每个点x建一个点,S-x-T,割x-T表示在S割表示选,割S-x表示在T割表示不选,所以把选点的代价$2p_v-d_v$放在x-T上。

如果点u选而点v不选,那么边(u,v)就必须加入最小割,所以从u向v连边容量为边权,这样割掉u-T和S-v后还有通路S-u-v-T。

建图完毕后,图中有负权边。我们给所有节点加一个固定代价U(U足够大,无论选不选),这样显然不影响决策,就可以在S-x和x-T上+U,从而解决负权边的问题。

(最小割不能直接给所有边加权,这样会破坏边权大小关系,必须要从建图方面考虑不影响决策的代价)

最终答案就是$\frac{U*n-c[S,T]}{2}$。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,S,T,p[5010];
namespace nwf{const int maxn=5010,maxm=200010,inf=0x3f3f3f3f;int tot=1,first[maxn],d[maxn],q[maxn],cur[maxn];struct edge{int v,f,from;}e[maxm*2];void insert(int u,int v,int f){tot++;e[tot].v=v;e[tot].f=f;e[tot].from=first[u];first[u]=tot;tot++;e[tot].v=u;e[tot].f=0;e[tot].from=first[v];first[v]=tot;}bool bfs(){memset(d,-1,sizeof(d));d[S]=0;int head=0,tail=1;q[head]=S;while(head<tail){int x=q[head++];for(int i=first[x];i;i=e[i].from)if(e[i].f&&d[e[i].v]==-1){d[e[i].v]=d[x]+1;q[tail++]=e[i].v;}}return ~d[T];}int dfs(int x,int a){if(x==T||a==0)return a;int flow=0,f;for(int& i=cur[x];i;i=e[i].from)if(e[i].f&&d[e[i].v]==d[x]+1&&(f=dfs(e[i].v,min(a,e[i].f)))){e[i].f-=f;e[i^1].f+=f;flow+=f;a-=f;if(a==0)break;}return flow;}int dinic(){int ans=0;while(bfs()){for(int i=S;i<=T;i++)cur[i]=first[i];ans+=dfs(S,inf);}return ans;}
}
int main(){scanf("%d%d",&n,&m);S=0;T=n+1;int U;for(int i=1;i<=n;i++){int u;scanf("%d",&u);nwf::insert(i,T,u*2);}for(int i=1;i<=m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);nwf::insert(u,v,w);nwf::insert(v,u,w);//
        p[u]+=w;p[v]+=w;U=max(U,max(p[u],p[v]));}for(int i=1;i<=n;i++){nwf::insert(S,i,U);nwf::insert(i,T,U-p[i]);}printf("%lld",(1ll*U*n-nwf::dinic())/2);return 0;
}

View Code

转载于:https://www.cnblogs.com/onioncyc/p/8805093.html

【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割相关推荐

  1. 最大权闭合子图(最小割模型)

    1,定义: 1,最大权闭合子图是最小割的一个模型.即每一个子图中的每一个点,其出边的点也全应该在这个子图中.而所有子图中,其点的权值和最大就是最大权闭合子图. 2,构建该图,我们把所有正权值点与源点s ...

  2. luogu P3410 拍照(最大权闭合图转最小割)

    luogu P3410 拍照 最大权闭合图转最小割 要得到最大收益,我们可以用总可能收益减去最小花费,也就是最小割. #include<cstdio> #include<cstrin ...

  3. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)

    整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...

  4. noi 2006 最大收益 最大权闭合图转最小割转最大流

    题意:一个公司有n个可以建造通讯战的地方,建造成本分别为pi,然后第i个公司会选择使用通讯站ai与bi,使用费用是ci,然后问这个通讯公司怎么建站能够获利最大.(净获利=总收益-总成本): 网上看到一 ...

  5. 图论 —— 网络流 —— 最小割 —— 最大权闭合子图

    [概述] 给出一个有向图,每一个点都有一个权值,现在要选择一个权值和最大的子图,使得每个点的后继都在子图中,这个子图就称为最大权闭合子图. 如上图,能选的子图有:Ø.{1,2,3,4,5,6}.{3, ...

  6. 最大权闭合子图(最小割)

    最大权闭合子图(最大流最小割) •参考资料 [1]最大权闭合子图 •权闭合子图 存在一个图的子图,使得子图中的所有点出度指向的点依旧在这个子图内,则此子图是闭合子图. 在这个图中有8个闭合子图:∅,{ ...

  7. P2762 太空飞行计划问题【最大权闭合子图 】

    题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要使用的全部仪器的 ...

  8. 洛谷 p4174 [noi2006] 最大获利 最小割(最大流),最大权闭合子图

    题目 题解 题目 洛谷 p4174 建站花费p[i]元,如果a,b两个站都建起来了获利c元,问最大的获利. 题解 首先需要理解最大流求最大权闭合子图,这个我也不说了,又是转载博客. https://b ...

  9. BZOJ 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图

    链接 BZOJ 4873 题解 当年的省选题--还记得蒟蒻的我Day1 20分滚粗-- 这道题是个最大权闭合子图的套路题.严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面.和我喜欢的妹子当 ...

最新文章

  1. WGCNA加权基因共表达网络分析(1)简介、原理
  2. 独家 | 基于新闻标题的股价走势分析(附链接)
  3. 拦截器获取请求参数post_SpringBoot拦截器如何获取http请求参数
  4. WPF整理-使用逻辑资源
  5. go http 并发数限制_618临近,Redis优化高并发下的抢枪抢买买买性能
  6. ibatis 用HashMap解决Ibatis未知列名和列数的查询结果的resultClass映射
  7. java的枚举_Java 枚举
  8. PHP学习思维导图--小树好久没长大了,给它加点枝叶
  9. Originpro使用技巧
  10. sql 2012 java_java连接SqlServer2012
  11. 2020,2022年全年详细工作日、周末、节假日数据表sql
  12. tif数据84坐标经纬度转Unity3D坐标
  13. bugku 抄错的字符
  14. 把自己做的网站进行app封包
  15. 不只是coding_不只是外表
  16. 低版本浏览器(chrome小于40 firefox小于50 ie小于9)会提示升级信息
  17. 介绍120 个相见恨晚的神器网站--学习、搜索、图片、视频样样不少!
  18. int, long, long long类型的范围
  19. Java基础之面向对象详解
  20. oracle分组查询取第一条数据,160804、oracle查询:取出每组中的第一条记录

热门文章

  1. C语言最后一次作业--总结报告
  2. Spring安全依赖查找
  3. windows 杀 端口
  4. Git教程——入门基础
  5. as, idea 出现 Gradle's dependency cache may be corrupt 错误分析
  6. 如何不显示地图就获取位置数据?
  7. 解决U盘无法格式化的问题
  8. 中国***产业链正在形成 ***今年收入可超百亿
  9. 989. 数组形式的整数加法
  10. 19.为什么要用异步框架,它解决什么问题?