传送门

Luogu

解题思路

网络流板子题。

建图细节见代码,也可以参考这道差不多的题

细节注意事项

  • 咕咕咕。

参考代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#include <queue>
#define rg register
using namespace std;
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= c == '-', c = getchar();
while (isdigit(c)) s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
} const int _ = 502;
const int __ = 30002;
const int INF = 2147483647; int tot = 1, head[_], nxt[__ << 1], ver[__ << 1], cap[__ << 1];
inline void Add_edge(int u, int v, int d)
{ nxt[++tot] = head[u], head[u] = tot, ver[tot] = v, cap[tot] = d; }
inline void link(int u, int v, int d) { Add_edge(u, v, d), Add_edge(v, u, 0); } int n, p, q, s, t, dep[_], cur[_]; inline int bfs() {
static queue < int > Q;
memset(dep, 0, sizeof (int) * (t - s + 1));
dep[s] = 1, Q.push(s);
while (!Q.empty()) {
int u = Q.front(); Q.pop();
for (rg int i = head[u]; i; i = nxt[i]) {
int v = ver[i];
if (dep[v] == 0 && cap[i] > 0)
dep[v] = dep[u] + 1, Q.push(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 = nxt[i]) {
int v = ver[i];
if (dep[v] == dep[u] + 1 && cap[i] > 0) {
int res = dfs(v, min(flow, cap[i]));
if (res) { cap[i] -= res, cap[i ^ 1] += res; return res; }
}
}
} 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
freopen("cpp.in", "r", stdin);
freopen("cpp.out", "w", stdout);
#endif
read(n), read(p), read(q);
s = 0, t = p + 2 * n + q + 1;
int f;
for (rg int i = 1; i <= n; ++i)
for (rg int j = 1; j <= p; ++j) {
read(f); if (f) link(j, i + p, 1);
}
for (rg int i = 1; i <= n; ++i)
for (rg int j = 1; j <= q; ++j) {
read(f); if (f) link(i + p + n, j + p + 2 * n, 1);
}
for (rg int i = 1; i <= n; ++i) link(i + p, i + p + n, 1);
for (rg int i = 1; i <= p; ++i) link(s, i, 1);
for (rg int i = 1; i <= q; ++i) link(i + p + 2 * n, t, 1);
printf("%d\n", Dinic());
return 0;
}

完结撒花 \(qwq\)

最新文章

  1. Delphi中ExtractFilePath、ParamStr以及更多文件/目录操作涉及的函数。附加对应的例子
  2. 使用jq插入节点
  3. iBatis框架batch处理优化 (转)
  4. app接口的简单案例 和一些总结
  5. 学习笔记-KMP算法
  6. php5.4.3连接SQLite3
  7. (二)CSS基础语法
  8. 《Python核心编程》 第六章 序列 - 课后习题
  9. 服务器部署_centos 安装nginx手记
  10. mac svn命令
  11. HDU4821---字符串hash,map判重
  12. MarkDown初遇
  13. 第二章——机器学习项目完整案例(End-to-End Machine Learning Project)
  14. java——形参与实参
  15. Fiddler手机抓包设置
  16. Elasticsearch 关键字:索引,类型,字段,索引状态,mapping,文档
  17. 2018牛客网暑期ACM多校训练营(第一场)A Monotonic Matrix(LGV)
  18. 【python】gearman阻塞非阻塞,同步/异步,状态
  19. json.dump()和json.dmups()的区别
  20. JS在if中的强制类型转换

热门文章

  1. MediaCreationTool制作WIN10安装U盘,安装纯净版win10的通用教程
  2. Spring Boot JWT 快速入门
  3. 吴裕雄--天生自然Python Matplotlib库学习笔记:matplotlib绘图(2)
  4. 吴裕雄 python 神经网络——TensorFlow 花瓣分类与迁移学习(2)
  5. HDU 1372 Knight Moves(bfs)
  6. 第四节:Vuejs组件及组件之间的交互
  7. RDLC 表达式设置精度
  8. 记处理spring-devtools 和 通用mapper 使用问题
  9. 为小学生出四则运算题目.java
  10. Trie学习总结