博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva10330
阅读量:4685 次
发布时间:2019-06-09

本文共 1651 字,大约阅读时间需要 5 分钟。

题目链接请戳

 

解题思路

用最大流。需要注意的只有拆点

 

代码

#include
#include
#include
#include
#define N 300#define INF 1e9using namespace std;int cap[N][N], flow[N][N], a[N], pre[N];int n, m, b, d;queue
q;int EK(int s, int t){ memset(flow, 0, sizeof(flow)); int f = 0; for (;;) { memset(a, 0, sizeof(a)); a[s] = INF; q.push(s); while (!q.empty()) { int u = q.front(); q.pop(); for (int v = 1; v <= t; v++) if (!a[v] && flow[u][v] < cap[u][v]) { pre[v] = u; q.push(v); a[v] = min(a[u], cap[u][v] - flow[u][v]); } } if (a[t] == 0) break; for (int u = t; u != s; u = pre[u]) { flow[pre[u]][u] += a[t]; flow[u][pre[u]] -= a[t]; } f += a[t]; } return f;} int main(){ while (scanf("%d", &n) != EOF) { memset(cap, 0, sizeof(cap)); for (int i = 1; i <= n; i++) { int v; scanf("%d", &v); cap[i][i+n] = v; } scanf("%d", &m); for (int i = 0; i < m; i++) { int x, y, v; scanf("%d%d%d", &x, &y, &v); cap[x+n][y] = v; } scanf("%d%d", &b, &d); for (int i = 0; i < b; i++) { int x; scanf("%d", &x); cap[0][x] = INF; } for (int i = 0; i < d; i++) { int x; scanf("%d", &x); cap[x+n][2*n+1] = INF; } printf("%d\n", EK(0, 2*n+1)); } return 0;}

 

转载于:https://www.cnblogs.com/ZengWangli/p/6054903.html

你可能感兴趣的文章
抓其根本(一)(hdu2710 Max Factor 素数 最大公约数 最小公倍数.....)
查看>>
k-window的关闭与打开设置
查看>>
SpringMVC学习系列(6) 之 数据验证
查看>>
二、如何通过URL获取其他网页源代码内容(火狐插件扩展开发教程)
查看>>
重构sql server的sys.sp_helptext存储
查看>>
浅谈JavaWeb架构演变
查看>>
遍历hashMap的两种方式
查看>>
ACM数论-素数
查看>>
Codeforces Round #464 (Div. 2) B. Hamster Farm[盒子装仓鼠/余数]
查看>>
例4-6
查看>>
Vue学习【第四篇】:Vue 之webpack打包工具的使用
查看>>
Python_pip_02_利用pip安装模块(以安装pyperclip为例)
查看>>
触屏智能手机界面可用性要素的纵贯式研究
查看>>
intent(2、隐形intent)
查看>>
JNA 备注
查看>>
vmware Linux虚拟机挂载共享文件夹
查看>>
argument 1 must be 2-item sequence, not int
查看>>
一个基本的MVC模式的增删改查
查看>>
Java开发环境安装过程
查看>>
C++ 利用栈解决运算问题
查看>>