1 做得还算麻利~
  2 /*最大闭合子图
  3 题意:建通讯站。每个通讯站有一定耗费,两个特定的通讯站之间建立通讯以后
  4 会有一定收益,问怎样建立通讯站可以使得收益最大 。
  5 ——最大权闭合子图->最小割
  6 ——url:http://acm.hdu.edu.cn/showproblem.php?pid=3879
  7 思路:
  8 首先考虑将图转化。
  9 即一条通讯线路有一定收益wi(即为正点权),但需要建立两个通讯站,
 10 这两个通讯站有一定造价pi(即为负点权)。
 11 将通讯线路也变成点,点权为收益,连两条有向只向两个通讯站。
 12 原来的通讯站点权不变。则start=0;end=m+n+1;totals=end+1;
 13 由此,题目转化为在新的图中求一个闭合图,使得其点权最大,即最大权闭合子图
 14 具体见图如下:
 15 建一个源点Start,与每个通讯线路的点相连,边权为收益
 16 建一个汇点end,end与每个通讯站相连,边权为建造费用
 17 通讯站与通讯线路之间的边权为无穷大
 18 最后的结果为所有通讯线路总的收益-最小割(最大流)
 19 */
 20 #include <iostream>
 21 #include<cstdio>
 22 #include<cstring>
 23 #include<vector>
 24 #include<queue>
 25 #include<algorithm>
 26 using namespace std;
 27 #define min(a,b) ((a)<(b))?(a):(b)
 28 #define max(a,b) ((a)>(b))?(a):(b)
 29 #define MAXN  60000//这里取略大于m+n+2的值(500+50000+2)所以这里取60000否则会runtime error
 30 #define MAXM 5400000//M取N的平方倍或者N*9
 31 #define INF 0x3f3f3f3f
 32
 33 struct node
 34 {
 35     int n;//点编号
 36     int w;//点权
 37 }Node[MAXN];
 38 //链式前向星
 39 struct enode
 40 {
 41     int t;
 42     int w;                //权值
 43     int c;                //流量
 44 //  int cost;
 45 //    int pre;            //前向指针
 46     int next;
 47 };
 48
 49
 50     struct enode e[MAXM];
 51     int box[MAXN],ecnt;
 52     //int etail[MAXN];        //尾部
 53     void init()
 54     {
 55         ecnt=0;
 56         memset(box,-1,sizeof(box));
 57     //    memset(etail,-1,sizeof(etail));        //初始化尾部
 58     }
 59     void addedge(int f,int t,int c)            //流量重载
 60     {
 61         e[ecnt].next=box[f];
 62         e[ecnt].t=t;
 63         e[ecnt].c=c;
 64         box[f]=ecnt++;
 65         e[ecnt].next=box[t];
 66         e[ecnt].t=f;
 67         e[ecnt].c=0;
 68         box[t]=ecnt++;
 69     }
 70 int sap(int s,int t,int N)//最大流问题
 71 {
 72     int gap[MAXN],lvl[MAXN],cur[MAXN],pre[MAXN];
 73     int curflow,ans=0,u,tmp,neck,i;
 74     memset(lvl,0,sizeof(lvl));
 75     memset(gap,0,sizeof(gap));
 76     memset(pre,-1,sizeof(pre));
 77     for(i=0;i<N;i++)
 78         cur[i]=box[i];
 79     gap[0]=N;
 80     u=s;
 81     while(lvl[s]<N)
 82     {
 83         if(u==t)
 84         {
 85             curflow=INF;
 86             for(i=s;i!=t;i=e[cur[i]].t)
 87             {
 88                 if(curflow>e[cur[i]].c)
 89                 {
 90                     neck=i;
 91                     curflow=e[cur[i]].c;
 92                 }
 93             }
 94             for(i=s;i!=t;i=e[cur[i]].t)
 95             {
 96                 tmp=cur[i];
 97                 e[tmp].c-=curflow;
 98                 e[tmp^1].c+=curflow;
 99             }
100             ans+=curflow;
101             u=neck;
102         }
103         for(i=cur[u];i!=-1;i=e[i].next)
104             if(e[i].c && lvl[u]==lvl[e[i].t]+1)
105                 break;
106         if(i!=-1)
107         {
108             cur[u]=i;
109             pre[e[i].t]=u;
110             u=e[i].t;
111         }
112         else
113         {
114             if(--gap[lvl[u]]==0)
115                 break;
116              cur[u]=box[u];
117             for(tmp=N,i=box[u];i!=-1;i=e[i].next)
118                 if(e[i].c)
119                     tmp=min(tmp,lvl[e[i].t]);
120             lvl[u]=tmp+1;
121             gap[lvl[u]]++;
122             if(u!=s)
123                 u=pre[u];
124         }
125     }
126     return ans;
127 }
128 int main()
129 {
130      int m,n,a,b,c,t,w;
131      int i,j,k;
132      int start,end,ans;
133   while(scanf("%d%d",&n,&m)!=EOF)  //;
134    {
135         //scanf("%d%d",&n,&m);
136         start=ans=0;
137         end=n+m+1;
138         init();
139         for(i=1;i<=n;i++)
140         {
141             scanf("%d",&w);
142             addedge(i+m,end,w);//终点和负点权边相连
143
144         }
145         for(i=1;i<=m;i++)
146         {
147             scanf("%d%d%d",&a,&b,&c);//正点权
148             ans+=c;
149             addedge(i,b+m,INF);//建图关键
150             addedge(i,a+m,INF);//建图关键
151             addedge(start,i,c);
152         }
153         t=sap( start,end,end+1);//*/
154         printf("%d\n",ans-t);
155    }
156     return 0;
157 }
158 /*
159 Sample Input
160
161 5 5
162 1 2 3 4 5
163 1 2 3
164 2 3 4
165 1 3 3
166 1 4 2
167 4 5 3
168
169 Sample Output
170
171 2
172 */

转载于:https://www.cnblogs.com/someonelikeyou/archive/2013/04/22/3036644.html

hdu 3879 Base Station相关推荐

  1. hdu 3879 Base Station 最大权闭合图

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3879 A famous mobile communication company is plannin ...

  2. HDU 2448 Mining Station on the Sea(Floyd+最优匹配)

    HDU 2448 Mining Station on the Sea(Floyd+最优匹配) http://acm.hdu.edu.cn/showproblem.php?pid=2448 题意: 给你 ...

  3. 【日常】记一次烦人的Apple Airport Express Base Station配置

    被学校停课了 思想品行分数不高 于是第一节:政治 第二节:政治... 第八节:政治 找别人借了手机 但是没有无线 只能心疼地(才不会x 用别人的流量 想起说还有个Airport Express 但是上 ...

  4. HDU 2448 Mining Station on the Sea

    预处理轮船到各个港口的最短路径,然后KM解之即可. /*HDU 2448*/ #include <iostream> #include <cstdlib> #include & ...

  5. hdu 2448 Mining Station on the Sea(最短路+费用流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2448 题意:给你一个由N个港口和M个海上油田构成的连通无向图(给出了图中所有的边和权值),现在给你N个 ...

  6. HDU - 7031 Power Station of Art 思维 + 二分图模型

    传送门 文章目录 题意: 思路: 题意: 给你两个完全相同的图,现在两个图的每个点上有一个值valvalval并且有一个颜色colcolcol,颜色只能为红色或黑色,注意两个图只是长得一样,点的权值和 ...

  7. HDU 2448 Mining Station on the Sea 最短路+KM

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2448 题意:有n个港口n条船,m个采矿站,船只能在能够通信的采矿站之间或者能够通信的港口和采矿站之间航行, ...

  8. hdu 3879(最小割模型求解最大权闭合图)

    题意: 公司得到了一共N个可以作为通讯信号中转站的地址,而由于这些地址的地理位置差异,在不同的地方建造通讯中转站需要投入的成本也是不一样的,所幸在前期调查之后这些都是已知数据:建立第i个通讯中转站需要 ...

  9. 2017 ACM-ICPC南宁网络赛: I. GSM Base Station Identification(线性变换)

    https://nanti.jisuanke.com/t/17316 题面有问题直接放链接 题意: 输入一个坐标,问这个坐标所在正六边形的ID,正六边形具分布如下: 题解: 还是看上图,坐标系原点不变 ...

  10. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

最新文章

  1. java培训分享:java软件开发可以用哪些软件?
  2. 【白皮书下载】《追本数源•开启产品智能化时代》| 产品指数级增长手册
  3. [JSP暑假实训] 二.JSP网站创建及Servlet实现注册表单提交、计算器运算
  4. 使用IDEA创建一个Servlet应用程序
  5. python表达式352的值为_表达式 3 and 5 的值为
  6. 1个模型横扫40+个SOTA!22位华人共同打造佛罗伦萨模型,一统图像视频文本,含9亿图像-文本对...
  7. 【华为云分享】机器学习笔记(七) ---- 贝叶斯分类
  8. 软件测试c s系统和b s,对C/S与B/S架构的产品进行系统测试,有哪些不同点与相同点?...
  9. 混迹职场,你的领导也是你的资源
  10. 研究WPS Office的LINUX postinst脚本,发现了错误,应该学习柳氏风格
  11. 决策树分箱-特征工程之数据离散化处理-基于python实现
  12. html实例,实现表单
  13. c语言弹出u盘 api,一个简单的C++编写的u盘病毒代码
  14. PT展揭晓“2021年中国5G实力榜”,亿美软通入围“5G消息企业十强”
  15. 更新至OSX 10.10后MBA外接网卡无法使用的解决
  16. 图片服务架构演进及云存储的优势
  17. Hive-cli(hive)与Beeline的区别
  18. php时间戳,日期时间转换及使用大全
  19. 一个简单的密码登陆界面。C语言
  20. 扫盲加扯淡——网友随笔画之云计算

热门文章

  1. 把我的漫画浏览器后台程序迁移到GAE上了
  2. Coaching 企业教练
  3. 求n!的位数以及求n!具体的值(C or C++)
  4. 智能优化算法:果蝇优化算法-附代码
  5. ENVI入门系列教程---一、数据预处理---3.1 基于自带定位信息的几何校正
  6. 从零基础入门Tensorflow2.0 ----二、5.3 实战sklearn超参数搜索
  7. 李宏毅机器学习HW2-winner or loser-利用逻辑回归进行收入分类
  8. 摄影测量学之共线方程的应用
  9. 算法笔记-------基数排序
  10. Java设计模式----工厂模式-----简单工厂(静态工厂模式)