题意:基站耗费成本,用户获得利益(前提是投入成本),求最大获利

最小割的简单应用,所有可能的收益-(消耗的成本/失去的收益),无穷大边表示冲突,最小割求括号内的范围即可

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<cstdlib>
  6. #include<cmath>
  7. #include<string>
  8. #include<vector>
  9. #include<stack>
  10. #include<queue>
  11. #include<set>
  12. #include<map>
  13. #include<ctime>
  14. #define rep(i,j,k) for(register int i=j;i<=k;i++)
  15. #define rrep(i,j,k) for(register int i=j;i>=k;i--)
  16. #define erep(i,u) for(register int i=head[u];~i;i=nxt[i])
  17. #define iin(a) scanf("%d",&a)
  18. #define lin(a) scanf("%lld",&a)
  19. #define din(a) scanf("%lf",&a)
  20. #define s0(a) scanf("%s",a)
  21. #define s1(a) scanf("%s",a+1)
  22. #define print(a) printf("%lld",(ll)a)
  23. #define enter putchar('\n')
  24. #define blank putchar(' ')
  25. #define println(a) printf("%lld\n",(ll)a)
  26. #define IOS ios::sync_with_stdio(0)
  27. using namespace std;
  28. const int maxn = 2e5+11;
  29. const int oo = 0x3f3f3f3f;
  30. typedef long long ll;
  31. ll read(){
  32. ll x=0,f=1;register char ch=getchar();
  33. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  34. while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  35. return x*f;
  36. }
  37. int to[maxn<<1],nxt[maxn<<1],cap[maxn<<1],flow[maxn<<1];
  38. int head[maxn],tot;
  39. void init(){
  40. memset(head,-1,sizeof head);
  41. tot=0;
  42. }
  43. void add(int u,int v,int w){
  44. to[tot]=v;
  45. nxt[tot]=head[u];
  46. cap[tot]=w;
  47. flow[tot]=0;
  48. head[u]=tot++;
  49. swap(u,v);
  50. to[tot]=v;
  51. nxt[tot]=head[u];
  52. cap[tot]=0;
  53. flow[tot]=0;
  54. head[u]=tot++;
  55. }
  56. int n,m,s,t;
  57. int dis[maxn],pre[maxn],cur[maxn],gap[maxn];
  58. bool vis[maxn];
  59. struct QUEUE{
  60. int que[maxn];
  61. int front,rear;
  62. void init(){front=rear=0;}
  63. void push(int u){que[rear++]=u;}
  64. int pop(){return que[front++];}
  65. bool empty(){return front==rear;}
  66. }que;
  67. void bfs(){
  68. memset(vis,0,sizeof vis);
  69. que.init();
  70. que.push(t);
  71. vis[t]=1;dis[t]=0;
  72. while(que.empty()^1){
  73. int u = que.pop();
  74. for(int i = head[u]; ~i; i = nxt[i]){
  75. register int v=to[i],c=cap[i^1],f=flow[i^1];
  76. if(!vis[v]&&c>f){
  77. vis[v]=1;
  78. dis[v]=dis[u]+1;
  79. que.push(v);
  80. }
  81. }
  82. }
  83. }
  84. int aug(){
  85. int u=t,ans=oo;
  86. while(u!=s){
  87. ans=min(ans,cap[pre[u]]-flow[pre[u]]);
  88. u=to[pre[u]^1];
  89. }
  90. u=t;
  91. while(u!=s){
  92. flow[pre[u]]+=ans;
  93. flow[pre[u]^1]-=ans;
  94. u=to[pre[u]^1];
  95. }
  96. return ans;
  97. }
  98. int isap(){
  99. int ans=0;
  100. bfs();
  101. memset(gap,0,sizeof gap);
  102. memcpy(cur,head,sizeof head);
  103. for(int i = 1; i <= n; i++) gap[dis[i]]++;
  104. int u = s;
  105. while(dis[s]<n){
  106. if(u==t){
  107. ans+=aug();
  108. u=s;
  109. }
  110. bool ok=0;
  111. for(int i = cur[u]; ~i; i = nxt[i]){
  112. int v=to[i],c=cap[i],f=flow[i];
  113. if(c>f&&dis[u]==dis[v]+1){
  114. ok=1;
  115. pre[v]=i;
  116. cur[u]=i;
  117. u=v;
  118. break;
  119. }
  120. }
  121. if(!ok){
  122. int mn=n-1;
  123. for(int i = head[u]; ~i; i = nxt[i]){
  124. int v=to[i],c=cap[i],f=flow[i];
  125. if(c>f) mn=min(mn,dis[v]);
  126. }
  127. if(--gap[dis[u]]==0) break;
  128. dis[u]=mn+1;gap[dis[u]]++;cur[u]=head[u];
  129. if(u!=s) u=to[pre[u]^1];
  130. }
  131. }
  132. return ans;
  133. }
  134. int main(){
  135. while(cin>>n>>m){
  136. init();s=1,t=1+n+m+1;
  137. #define guai(x) ((x)+n+1)
  138. rep(i,1,n){
  139. int p=read();
  140. add(s,1+i,p);
  141. }
  142. ll sum=0;
  143. rep(i,1,m){
  144. int x=read();
  145. int y=read();
  146. int z=read();sum+=z;
  147. add(1+x,guai(i),oo);
  148. add(1+y,guai(i),oo);
  149. add(guai(i),t,z);
  150. }
  151. ll ans=isap();
  152. println(sum-ans);
  153. }
  154. return 0;
  155. }

BZOJ - 1497 最小割应用的更多相关文章

  1. bzoj 1497 最小割模型

    我们可以对于消费和盈利的点建立二分图,开始答案为所有的盈利和, 那么源向消费的点连边,流量为消费值,盈利向汇连边,流量为盈利值 中间盈利对应的消费连边,流量为INF,那么我们求这张图的最小割,用 开始 ...

  2. bzoj 1497 最小割

    思路:最小割好难想啊,根本想不到.. S -> 用户群 = c[ i ] 基站 -> T = p[ i ] 用户群 -> a[ i ] = inf 用户群 -> b[ i ] ...

  3. BZOJ 1412 & 最小割

    什么时候ZJ省选再现一次这么良心的题吧... 题意: 在一个染色的格子画分割线,使其不想连,求最少的线段 SOL: 裸裸的最小割.题目要求两种颜色不想连,我们把他分到两个集合,也就是把所有相连的边切断 ...

  4. BZOJ 1797 最小割

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1797 题意:给出一个有向图,每条边有流量,给出源点汇点s.t.对于每条边,询问:(1)是 ...

  5. BZOJ 2229 最小割

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2229 题意:给定一个带权无向图.若干询问,每个询问回答有多少点对(s,t)满足s和t的最 ...

  6. bzoj 1934 最小割

    收获: 1.流量为0的边可以不加入. 2.最小割方案要与决策方案对应. #include <cstdio> #include <cmath> #include <cstr ...

  7. bzoj 3996 最小割

    公式推出来后想了半天没思路,居然A是01矩阵..... 如果一个问题是求最值,并那么尝试先将所有可能收益加起来,然后矛盾部分能否用最小割表达(本题有两个矛盾,第一个是选还是不选,第二个是i,j有一个不 ...

  8. bzoj 1934最小割

    比较显然的最小割的题,增加节点source,sink,对于所有选1的人我们可以(source,i,1),选0的人我们可以(i,sink,1),然后对于好朋友我们可以连接(i,j,1)(j,i,1),然 ...

  9. BZOJ 1797 最小割(最小割割边唯一性判定)

    问题一:是否存在一个最小代价路径切断方案,其中该道路被切断? 问题二:是否对任何一个最小代价路径切断方案,都有该道路被切断? 现在请你回答这两个问题. 最小割唯一性判定 jcvb: 在残余网络上跑ta ...

随机推荐

  1. 关于sleep的理解

    unix是按时间片轮转调度, windows是抢占式调度 以吃蛋糕为例子,10个人吃蛋糕,如果是unix下, 假设开始时,每个人都处于就绪状态,那么操作系统调度大家排好队,按顺序吃,每个人吃1分钟, ...

  2. hdu 4740 The Donkey of Gui Zhou

    1.扯犊子超多if else 判断的代码,华丽丽的TLE. #include<stdio.h> #include<string.h> #define N 1010 int ma ...

  3. 黑盒测试实践-任务进度-Day03

    任务进度11-28 使用工具 selenium 小组成员 华同学.郭同学.穆同学.沈同学.覃同学.刘同学 任务进度 经过了前两天的学习任务的安排,以下是大家的任务进度: 华同学(任务1) 1.今天就接 ...

  4. C# static 字段初始值设定项无法引用非静态字段、方法或属性

    问题:字段或属性的问题字段初始值设定项无法引用非静态字段.方法 下面代码出错的原因,在类中定义的字段为什么不能用? public string text = test(); //提示 字段或属性的问题 ...

  5. C# worksheet设置Excel样式

    1.例子导出Excel的样式 样式代码 public void Exportdatagridviewtoexcel(string Textname) { SaveFileDialog savedial ...

  6. C#NPOI.RabbitMQ.EF.Attribute.HttpRuntime.Cache.AD域.List<T>根据指定字段去重.前端JQuery.Cache.I18N(多语言).data-xx(自定义属性)

    使用NPOI 操作Excel 个人使用的电脑基本默认安装Excel 操作起来 调用Excel的组件便可.如果是一台服务器.没有安装Excel,也就无法调用Excel组件. 在此推荐第三方插件.NPOI ...

  7. FileTracker:error FTK1011编译错误的原因和解决办法

    原因: 今天创建好项目名字完成关了VS,后感觉文件夹名字不太对改了一下,后来程序就调试不了出现FileTracker:error FTK1011编译错误0.0,经过网络查询应该是路径问题 解决方法: ...

  8. 安卓开发时访问google方法

    启动浏览器后15秒左右,浏览器的右上角就会出现图标 启用防火墙功能(右上角墙形图标),这时候程序就会去寻找网上代理,从而达到访问GOOGLE的效果,提示如果不访问google网站,可再点击一下关闭防火 ...

  9. C# 接口(2)

    接口的实现方式. 接口的实现分两种: 1 显示实现接口 2 实现接口. 我们前面所得的接口的实现均为实现接口.也就是第二种方式.那么我们来来看第第一种实现方式: interface IHuman { ...

  10. Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!

    当我们搞定DataSnap后,我们进入客户端程序开发阶段了,我们建立了客户端模块后,打算按照刚才开发服务器的步骤开发客户端程序,随后加入了DBExpress的TSQLDataSet,设定数据库连接后, ...