「NOI2006」最大获利

传送门

最小割。

对于每一组用户群 \(A_i, B_i, C_i\) ,连边 $S \to A_i, S \to B_i, $ 容量为成本,还有 \(i \to T\) ,容量为收益 \(C_i\),\(A_i, B_i\) 都向 \(i\) 连边,容量为 \(inf\) ,割掉与 \(S\) 的连边表示支付成本,割掉与 \(T\) 的连边表示放弃收益。

参考代码:

#include <algorithm>
#include <cstring>
#include <cstdio>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std;
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
} const int _ = 55010, __ = 155010, INF = 2147483647; int tot = 1, head[_];
struct Edge { int ver, cap, nxt; } edge[__ << 1];
inline void Add_edge(int u, int v, int d) { edge[++tot] = (Edge) { v, d, head[u] }, head[u] = tot ; }
inline void link(int u, int v, int d) { Add_edge(u, v, d), Add_edge(v, u, 0); } int n, m, s, t, dep[_], cur[_], Q[_]; inline int bfs() {
int hd = 0, tl = 0;
memset(dep, 0, sizeof (int) * (t - s + 1));
Q[++tl] = s, dep[s] = 1;
while (hd < tl) {
int u = Q[++hd];
for (rg int i = head[u]; i; i = edge[i].nxt) {
int v = edge[i].ver;
if (dep[v] == 0 && edge[i].cap > 0)
dep[v] = dep[u] + 1, Q[++tl] = v;
}
}
return dep[t] > 0;
} inline int dfs(int u, int flow) {
if (u == t) return flow;
for (rg int& i = cur[u]; i; i = edge[i].nxt) {
int v = edge[i].ver;
if (dep[v] == dep[u] + 1 && edge[i].cap > 0) {
int res = dfs(v, min(flow, edge[i].cap));
if (res) { edge[i].cap -= res, edge[i ^ 1].cap += res; return res; }
}
}
return 0;
} inline int Dinic() {
int res = 0;
while (bfs()) {
for (rg int i = s; i <= t; ++i) cur[i] = head[i];
while (int d = dfs(s, INF)) res += d;
}
return res;
} int main() {
#ifndef ONLINE_JUDGE
file("cpp");
#endif
int sum = 0;
read(n), read(m), s = 0, t = n + m + 1;
for (rg int x, i = 1; i <= n; ++i) read(x), link(s, i, x);
for (rg int x, y, z, i = 1; i <= m; ++i)
read(x), read(y), read(z), link(x, i + n, INF), link(y, i + n, INF), link(i + n, t, z), sum += z;
printf("%d\n", sum - Dinic());
return 0;
}

最新文章

  1. 20个Mac用户必须掌握的触摸手势
  2. 开发前准备 va2015安装
  3. C library function - tmpfile()
  4. 关于phpcmsv9更新缓存出现链接被重置的问题
  5. GOOGLE搜索從入門到精通V4.0
  6. Linux中select poll和epoll的区别
  7. Hibernate二级缓存简述及基于Spring4,Hibernate5,Ehcache3的二级缓存配置
  8. Dynamics CRM中跨域调用Web API 2
  9. Spring AOP 切面编程实战Demo项目
  10. JMeter上架标的(yyb-csg)
  11. BitSet的用法
  12. (0)MySQL 的指令(包含了解知识点)
  13. Java-学习-喜欢-品牌:互联网公司成为动物园,拟人化品牌形象真的那么有意思?
  14. 把EXE可执行文件等作为资源包含在Delphi编译文件中
  15. 2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——操作文件
  16. java通过Stream对list集合分组
  17. iOS 两个应用之间的切换
  18. Jenkins--持续集成服务器
  19. Openflow1.3
  20. buntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题

热门文章

  1. ASP.NET的 Razor引擎和JavaScript是一种什么关系
  2. element-ui里el-form的lable颜色怎么修改?
  3. Kali2.0中peda与pwntools的安装
  4. Flask 学习之 路由
  5. __dirname和__filename和process.cwd()三者的区别
  6. 201771010135 杨蓉庆AND张燕 《面对对象程序设计(java)》第十一周学习总结
  7. 关于 appium get_attribute 方法的坑
  8. dp(多重背包)
  9. hadoop学习笔记(一):NameNade持久化和DataNode概念
  10. app内嵌 h5页面 再滑动的时候 触发击穿底下的一些touchstart事件