hdu 3996 Gold Mine ( 最大权闭合图 )
http://acm.hdu.edu.cn/showproblem.php?pid=3996
题意 :
- 题意: 有 n 个金矿,每个金矿开发需要一定的价值,开发之后可以获得一定的价值,而且一些金矿受到另一些金矿的限制,即开采这个金矿之前要开采
- 限制它的金矿,问最多可以获得多少价值。
题解:
很明显的 最大权闭合图 金矿 ,有 开采的 花费 和价值 ,那么 开采的 利益就 是 价值 - 花费 ;
- 如果某个金矿的开发利润为正值,就在源点和该点之间连一条容量为该利润的边
- 如果某个金矿的开发利润为负值,就在该点和汇点之间连一条容量为该利润绝对值的边
- 如果某个金矿收到另一个金矿的限制,就在两个金矿之间连一条容量为INF的边。
- 累计所有正值利润的和 sum,获得的最大利润为sum - maxflow
2 #include<cstring>
3 #include<cmath>
4 #include<iostream>
5 #include<algorithm>
6 #include<set>
7 #include<map>
8 #include<queue>
9 #include<vector>
10 #include<string>
11 #define Min(a,b) a<b?a:b
12 #define Max(a,b) a>b?a:b
13 #define CL(a,num) memset(a,num,sizeof(a));
14 #define maxn 5100
15 #define eps 1e-6
16 #define inf 10000000000
17 #define read() freopen("data.in","r",stdin) ;
18 #define ll __int64
19 using namespace std;
20 ll n , m ;
21 struct node
22 {
23 int from;
24 int to ;
25 ll flow ;
26 int next ;
27 } p[maxn*100];
28 int head[maxn] ,s,t,cnt,dis[maxn];
29 ll a[maxn] ,ans,num,sum;
30
31 bool vis[maxn] ;
32
33 queue<int>que ;
34 void add(int from ,int to , ll flow )
35 {
36 p[cnt].to = to ;
37 p[cnt].flow =flow ;
38 p[cnt].next = head[from] ;
39 head[from] = cnt++ ;
40
41 p[cnt].to = from ;
42 p[cnt].flow = 0 ;
43 p[cnt].next = head[to] ;
44 head[to] = cnt++ ;
45
46 }
47
48 int bfs()
49 {
50 CL(dis,-1) ;
51 dis[s] = 0 ;
52 int i ;
53 while(!que.empty())que.pop() ;
54
55 que.push(s) ;
56 while(!que.empty())
57 {
58 int u = que.front() ;que.pop() ;
59
60 for(i = head[u] ; i != -1 ;i = p[i].next)
61 {
62 int v = p[i].to ;
63
64 ll flow = p[i].flow ;
65
66 if(flow > 0)
67 if(dis[v] < 0 )
68 {
69 dis[v] = dis[u] + 1 ;
70 que.push(v) ;
71 }
72
73 }
74
75 }
76
77 if(dis[t] > 0) return 1;
78 else return 0 ;
79
80
81
82 }
83
84
85 ll dfs(int x,ll mx)
86 {
87
88
89 if(x == t) return mx ;
90
91 int i ;
92 ll a ,tf = 0;
93
94
95 for(i = head[x] ; i != -1 ; i = p[i].next)
96 {
97 int v = p[i].to ;
98 ll flow = p[i].flow ;
99 if(flow > 0)
100 {
101 if( dis[v] == dis[x] + 1 && (a = dfs(v,min(flow ,mx))))
102 {
103 p[i].flow -= a ;
104 p[i^1].flow += a;
105
106 return a ;
107 }
108
109 }
110
111 }
112
113
114 if(!tf) dis[x] = - 1;
115 return tf ;
116
117 }
118
119 ll dinic()
120 {
121
122 ans = 0 ;
123 ll res = 0 ;
124 while(bfs())
125 {
126 while(res = dfs(s,inf))ans += res ;
127 }
128
129 return ans ;
130
131
132 }
133
134 int main()
135 {
136 int T,i,j,a,b,num ;
137 ll cost ,val;
138 scanf("%d",&T);
139 int cas = 0 ;
140 ll sum ;
141 while(T--)
142 {
143
144 CL(head, -1) ;
145 cnt = 0 ;
146 sum = 0 ;
147 scanf("%d",&n);
148
149 s = 0 ;
150 t = n*26 + n + 1 ;
151
152 for(i = 1 ; i <= n;i++)
153 {
154 scanf("%d",&m);
155 for(j = 1 ; j <= m;j++)
156 {
157 scanf("%I64d%I64d%d",&cost,&val,&num);
158
159 ll tmp = val - cost ;
160 if(tmp > 0)
161 {
162 add(s,i*26 + j,tmp);
163
164 sum += tmp ;
165 }
166 else
167 {
168 add(i*26 + j,t, -tmp) ;
169
170 }
171
172
173 while(num--)
174 {
175 scanf("%d%d",&a,&b);
176 add(i*26+j,a*26 + b,inf) ;
177 }
178 }
179 }
180
181 ll ans = dinic() ;
182
183 printf("Case #%d: %I64d\n",++cas,sum - ans) ;
184
185 }
186 }
转载于:https://www.cnblogs.com/acSzz/archive/2012/11/10/2763896.html
hdu 3996 Gold Mine ( 最大权闭合图 )相关推荐
- hdu 3879 Base Station 最大权闭合图
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3879 A famous mobile communication company is plannin ...
- HDU 3061 Battle(最小割----最大权闭合图)
题意: Problem Description 由于小白同学近期习武十分刻苦,很快被晋升为天策军的统帅.而他上任的第一天,就面对了一场极其困难的战斗: 据侦查兵回报,前方共有N座城池,考虑到地势原因, ...
- luogu P3410 拍照(最大权闭合图转最小割)
luogu P3410 拍照 最大权闭合图转最小割 要得到最大收益,我们可以用总可能收益减去最小花费,也就是最小割. #include<cstdio> #include<cstrin ...
- 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)
整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...
- 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图
原文地址:http://www.cnblogs.com/GXZlegend/p/6808268.html 题目描述 输入 输出 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何 ...
- POJ 2987 Firing(最大权闭合图)
[题目链接] http://poj.org/problem?id=2987 [题目大意] 为了使得公司效率最高,因此需要进行裁员, 裁去不同的人员有不同的效率提升效果,当然也有可能是负的效果, 如果裁 ...
- 最大权闭合 图 讲解
详见 国家集训队 论文 2007 胡伯涛 <最小割模型在信息学竞赛中的应用> 首先说几个我看时疑惑的问题 1:为什么 割里面的点集就是闭合 图 ? 答:由于 我们见图时,将原图的 ...
- Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图
1391: [Ceoi2008]order Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1105 Solved: 331 [Submit][Sta ...
- 洛谷 - P2762 太空飞行计划问题(最大权闭合图+路径打印)
题目链接:点击查看 题目大意:给出n个实验,每个实验完成之后都可以得到一定的奖金,但每个实验需要特殊的器械才可以完成,准备器械又需要一定的支出,现在问如何选择实验才能让利润最大化,并输出需要选择的实验 ...
- POJ - 2987 Firing(最大权闭合图)
题目链接:点击查看 题目大意:某公司想要裁员,裁员的标准是如果某人被裁,那么其下属也会被裁,依此类推,每一个人都有一个贡献度,问怎样裁员才能使得最后的贡献度最大并且裁掉人数最少 题目分析:最大权闭合图 ...
最新文章
- Linux Top 命令解析 比较详细
- python在windows的开发环境_Python合集之Python开发环境在Windows系统里面搭建
- jquery之ajax请求工具类
- ios 动画设计_动画和讲故事在设计中的力量
- PHP大势已去,PHP宝藏可为我所用
- 吴恩达《机器学习》学习笔记十三——机器学习系统(补充)
- 形象化理解 SpringBoot + SpringCloud
- 最好用的JQuery插件集合以及组合拳
- 《促进大数据发展行动纲要》发布 部署三大任务助力经济转型
- oracle 两表关联查询
- Kaminari分页
- canvas入门教学(5)运动小球屏保特效与下雪特效渲染
- World中利用宏命令批量删除页眉和页脚(亲测好用!)
- 树莓派通过API向企业微信推送图文
- ADB命令使用大全及使用原理
- week11作业——C - 必做题11-3
- 投资合伙人股份分配_创业者必看的合伙人股权分配细则
- java多行文本框_请问各位大神要怎么把数据库信息显示在多行文本框上
- (原创)自编protel99se鼠标增强工具,支持dxp2004
- Android Ble 一连多笔记
热门文章
- 隋朝之前,扬州指的是现在的南京
- linux下安装nginx1.10,Linux(RHEL7.0)下安装Nginx-1.10.2
- C++ List的用法(整理)[转载]
- sa linux,sa | 搜索结果 | Linux运维部落
- 关于mysql性能优化_关键的十个MySQL性能优化技巧
- php 两位小数 00,php保存两位小数的几种要领引见_后端开发
- C++使用命名管道使用进程间通信
- fin.is_open()与fin.open()
- 深入理解原型和原型链
- 前后端分离,nginx解决跨域问题