最小割好劲啊

原题:

新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战。THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成前期市场研究、站址勘测、最优化等项目。在前期市场调查和站址勘测之后,公司得到了一共N个可以作为通讯信号中转站的地址,而由于这些地址的地理位置差异,在不同的地方建造通讯中转站需要投入的成本也是不一样的,所幸在前期调查之后这些都是已知数据:建立第i个通讯中转站需要的成本为Pi(1≤i≤N)。另外公司调查得出了所有期望中的用户群,一共M个。关于第i个用户群的信息概括为Ai, Bi和Ci:这些用户会使用中转站Ai和中转站Bi进行通讯,公司可以获益Ci。(1≤i≤M, 1≤Ai, Bi≤N) THU集团的CS&T公司可以有选择的建立一些中转站(投入成本),为一些用户提供服务并获得收益(获益之和)。那么如何选择最终建立的中转站才能让公司的净获利最大呢?(净获利 = 获益之和 - 投入成本之和)

N≤5 000,M≤50 000,0≤Ci≤100,0≤Pi≤100

本来想看妹主席的ppt补一波最小割,然后照着ppt上的套路建图,然后连样例都过不了……
然后自己脑补啊,然后脑补出来的图离妹主席的模型越来越远了,最后想到一种建图好像有理有据的样子

测一下样例过了,然后抱着直接WA掉的心态裸交1A……

具体就是先使用最小不能获得的收益转化成最小割模型

然后s到i表示选,i到t表示不选,那么如果把s->i割掉就会损失pi的收益(表示选),把i->t割掉就会损失wi/2的收益(表示不选)

为啥是wi/2?

因为如果a和b有两个都选则获得wi的收益的条件,就会在ab之间连两个方向相反流量为wi/2的边(为啥不是无向边?,因为网络流要建反向边)

然后如果两个都没选那么割掉两个i->t就是少了wi/2*2的收益,如果一个选一个没选那么没选的a就会通过s->a,a->b,b->t割一个wi/2的边,依旧会少wi/2*2的收益

只有当两个都选即s->a,s->b都被割掉的时候a,b之间的边和a,b到t的边才能避免被割掉,获得wi/2*2的收益

(感觉妹主席的方法和我的核心思想是一样的但是在某些细节上不同?反正我A掉了

恩差不多就是酱紫

为了防止精度问题我输入的时候乘个2输出的时候再除回去,不知道这样是否有必要

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. using namespace std;
  7. const int oo=;
  8. int rd(){int z=,mk=; char ch=getchar();
  9. while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
  10. while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
  11. return z*mk;
  12. }
  13. struct ddd{int nxt,y,v,rvs;}e[]; int lk[],ltp=;
  14. inline void ist(int x,int y,int z){
  15. e[++ltp].nxt=lk[x],lk[x]=ltp,e[ltp].y=y,e[ltp].v=z,e[ltp].rvs=ltp+;
  16. e[++ltp].nxt=lk[y],lk[y]=ltp,e[ltp].y=x,e[ltp].v=,e[ltp].rvs=ltp-;
  17. }
  18. int n,m,a[]; int s,t,M=;
  19. int lvl[];
  20. int q[],hd=;
  21. int quq=;
  22. bool gtlvl(){
  23. memset(lvl,,sizeof(lvl));
  24. q[hd=]=s,lvl[s]=;
  25. for(int k=;k<=hd;++k)
  26. for(int i=lk[q[k]];i;i=e[i].nxt)if(e[i].v && !lvl[e[i].y])
  27. lvl[e[i].y]=lvl[q[k]]+,q[++hd]=e[i].y;
  28. return lvl[t];
  29. }
  30. int mxflw(int x,int y){
  31. if(x==t) return y;
  32. int bwl=,flw=;
  33. for(int i=lk[x];i && bwl<y;i=e[i].nxt)if(e[i].v && lvl[e[i].y]==lvl[x]+)
  34. if((flw=mxflw(e[i].y,min(y-bwl,e[i].v)))){
  35. bwl+=flw;
  36. e[i].v-=flw,e[e[i].rvs].v+=flw;
  37. //cout<<x<<"->"<<e[i].y<<" "<<flw<<endl;
  38. }
  39. if(!bwl) lvl[x]=;
  40. return bwl;
  41. }
  42. int dnc(){
  43. int bwl=,flw;
  44. while(gtlvl())while(flw=mxflw(s,oo)) bwl+=flw;
  45. return bwl;
  46. }
  47. int main(){//freopen("ddd.in","r",stdin);
  48. cin>>n>>m; s=,t=n+;
  49. for(int i=;i<=n;++i) ist(s,i,rd()*);
  50. int l,r,v;
  51. for(int i=;i<=m;++i){
  52. l=rd(),r=rd(),v=rd()*; quq+=v,v>>=;
  53. a[l]+=v,a[r]+=v,ist(l,r,v),ist(r,l,v);
  54. }
  55. for(int i=;i<=n;++i) ist(i,t,a[i]);
  56. cout<<(quq-dnc())/<<endl;
  57. return ;
  58. }

【BZOJ1497】【NOI2006】最大获利的更多相关文章

  1. BZOJ1497: [NOI2006]最大获利[最小割 最大闭合子图]

    1497: [NOI2006]最大获利 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 4375  Solved: 2142[Submit][Status] ...

  2. BZOJ 1497 [NOI2006]最大获利

    1497: [NOI2006]最大获利 Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前 ...

  3. bzoj1497: [NOI2006]最大获利(最大权闭合子图)

    1497: [NOI2006]最大获利 题目:传送门 题解: %%%关于最大权闭合子图很好的入门题 简单说一下什么叫最大权闭合子图吧...最简单的解释就是正权边连源点,负权边连汇点(注意把边权改为正数 ...

  4. [bzoj1497][NOI2006]最大获利_网络流_最小割

    最大获利 bzoj-1497 题目大意:可以建立一个点,花费一定的代价:将已经建立的两个点之间连边,得到一定收益.有些节点之间是不允许连边的. 注释:1<=点数<=5,000,1<= ...

  5. Bzoj1497 [NOI2006]最大获利

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 4449  Solved: 2181 Description 新的技术正冲击着手机通讯市场,对于各大运营商来 ...

  6. BZOJ1497 [NOI2006]最大获利 网络流 最小割 SAP

    原文链接http://www.cnblogs.com/zhouzhendong/p/8371052.html 题目传送门 - BZOJ1497 题意概括 有n个站要被建立. 建立第i个站的花费为pi. ...

  7. BZOJ1497[NOI2006]最大获利——最大权闭合子图

    题目描述 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成 ...

  8. 【最大权闭合子图】BZOJ1497[NOI2006]-最大获利

    [题目大意] 建立第i个通讯中转站需要的成本为Pi(1≤i≤N).另外公司调查得出了所有期望中的用户群,一共M个.关于第i个用户群的信息概括为Ai, Bi和Ci:这些用户会使用中转站Ai和中转站Bi进 ...

  9. 【最大权闭合子图 最小割】bzoj1497: [NOI2006]最大获利

    最大权闭合子图的模型:今天才发现dinic板子是一直挂的…… Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在 ...

  10. bzoj1497 [NOI2006]最大获利 最大权闭合子图

    链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1497 思路 最大权闭合子图的裸题 一开始知道是这个最大权闭合子图(虽然我不知道名字),但是我 ...

随机推荐

  1. UVa 10891 - Game of Sum 动态规划,博弈 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  2. vue-router-3-嵌套路由

    <div id="app"> <router-view></router-view> </div> const User = { t ...

  3. webView 的种种

    1.关于UI 我们在设置webview的时候,有时候会发现在加载的过程中会出现一个黑色的条条,在加载完成的时候有得时候继续存在,有得时候消失不见. 这个黑边是由于webView.scrollview向 ...

  4. [Linux]Linux下开启snmp支持IPV4和IPV6

    SNMP简介 简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol).数据库模型(database schema)和一组资源 ...

  5. Linux3.10.0块IO子系统流程(2)-- 构造、排序、合并请求

    Linux块设备可以分为三类.分别针对顺序访问物理设备.随机访问物理设备和逻辑设备(即“栈式设备”)   类型 make_request_fn request_fn 备注 SCSI 设备等 从bio构 ...

  6. 6.5C++查找字符串

    参考:http://www.weixueyuan.net/view/6394.html 总结: find函数可以在字符串中查找子字符串中出现的位置.该函数有两个参数,第一个参数是待查找的子字符串,第二 ...

  7. Zabbix4.0监控URL

    一:新建群组 1.1:web monitor 二:新建模板 2.1:配置-模板-模板 2.3:创建应用集 配置-模板-web monitor-应用集 2.4:创建web场景 2.5:创建场景步骤: 以 ...

  8. linux 下ftp几种上传和下载方式

    1. ftp自动登录批量下载文件. 复制代码代码如下: #####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bashftp -n<& ...

  9. jq 全选与联动的小例子

    function initcheckbox () { $(".j-jobs-power dl dt input").click(function () { if (this.che ...

  10. python 爬虫数据准换时间格式

    timeStamp = 1381419600 dateArray = datetime.datetime.utcfromtimestamp(timeStamp) otherStyleTime = da ...