luogu P1231 教辅的组成

每一本书都要拆点,拆成入点和出点,因为每一本书只能匹配一次

图片来源

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>using namespace std;
typedef long long ll;
int n, m, S, T;namespace dinic{const int N = 500007, M = 5000007, INF = 0x3f3f3f3f;const ll LINF = 0x3f3f3f3f3f;int n, m, S, T;int deep[M];ll maxflow, edge[M];int head[N], ver[M], nex[M], tot, cur[N];inline void add(int x, int y, int z, bool o = 1){ver[tot] = y;edge[tot] = z;nex[tot] = head[x];head[x] = tot ++ ;if(o)add(y, x, 0, 0);}bool bfs(){queue<int>q;memset(deep, 0x3f, sizeof deep);deep[S] = 0;cur[S] = head[S];q.push(S);while(q.size()){int x = q.front();q.pop();for(int i = head[x]; ~i; i = nex[i]){int y = ver[i], z = edge[i];if(z > 0 && deep[y] == INF){q.push(y);deep[y] = deep[x] + 1;cur[i] = head[i];if(y == T)return true;}}}return false;}ll dfs(int x, ll flow){if(x == T)return flow;ll ans = 0, i, k;for(i = cur[x] ;~i &&flow; i = nex[i]){int y = ver[i];ll z = edge[i];if(z > 0 && deep[y] == deep[x] + 1){k = dfs(y, min(flow, z));if(k == 0)deep[y] = INF;edge[i] -= k;edge[i ^ 1] += k;ans += k;flow -= k;}}return ans;}inline void main(){while(bfs()){memcpy(cur, head, sizeof head);maxflow += dfs(S, LINF);}}inline void init(int _n, int _S, int _T){n = _n, S = _S, T = _T;memset(head, -1, sizeof head);tot = 0, maxflow = 0;}
}int n1, n2, n3, m1, m2;
int main()
{//1 ~ n1                             : 书,入点//n1 ~ 2 * n1                        : 书,出点//2 * n1 + 1 ~ 2 * n1 + n2           : 练习册,练习册连书的入点//2 * n1 + n2 + 1 ~ 2 * n1 + n2 + n3 : 答案,书的出点连答案scanf("%d%d%d", &n1, &n2, &n3);S = 0, T = n1 + n2 + n3 + n1 + 1;dinic::init(T * 10, S, T);for(int i = 1; i <= n1; ++ i){dinic::add(i, i + n1, 1);}scanf("%d", &m1);for(int i = 1; i <= m1;++ i){int x, y;scanf("%d%d", &x, &y);dinic::add(y + 2 * n1, x, 1);}scanf("%d", &m2);for(int i = 1; i <= m2; ++ i){int x, y;scanf("%d%d", &x, &y);dinic::add(x + n1, y + 2 * n1 + n2, 1);}for(int i = 1; i <= n2; ++ i){dinic::add(S, 2 * n1 + i, 1);}for(int i = 1; i <= n3; ++ i){dinic::add(2 * n1 + n2 + i, T, 1);}dinic::main();printf("%lld\n", dinic::maxflow);return 0;
}

luogu P1231 教辅的组成(建图、拆点、最大流)相关推荐

  1. luogu P1231 教辅的组成

    二次联通门 : luogu P1231 教辅的组成 /*luogu P1231 教辅的组成拆点 + 最大流把书拆点后与答案与资料连边跑最大流 */ #include <algorithm> ...

  2. 【POJ - 3281】Dining(拆点建图,网络流最大流)

    题干: Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she wi ...

  3. 【POJ - 1087】A Plug for UNIX(建图,网络流最大流)

    题干: You are in charge of setting up the press room for the inaugural meeting of the United Nations I ...

  4. luogu P4258 [WC2016]挑战NPC(一般图的最大匹配,带花树,建图、拆点技巧)

    整理的算法模板合集: ACM模板 luogu P4258 [WC2016]挑战NPC 如果是一堆球一堆筐,每一个筐里只能放一个球,求最大能放多少个球, 那么就是一个二分图的最大匹配问题,非常简单,我们 ...

  5. 2016 计蒜之道 复赛 菜鸟物流的运输网络【拆点+思维建图+网络流】

    菜鸟物流的运输网络 菜鸟物流有自己的运输网络,网络中包含 nn 个城市物流集散中心,和 mm 对城市之间的运输线路(线路是双向的).菜鸟物流允许淘宝卖家自行确定包裹的运输路径,但只有一条限制规则:不允 ...

  6. POJ 3281 -- Dining(最大流,拆点建图)

    题目链接 Description Cows are such finicky eaters. Each cow has a preference for certain foods and drink ...

  7. P4619 [SDOI2018]旧试题(莫比乌斯反演,建图优化三重枚举,三元环计数,神仙好题,超级清晰易懂)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4619 [SDOI2018]旧试题(莫比乌斯反演,三元环计数) Problem 计算: ∑i=1A ...

  8. 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)

    B.POJ 3281 DiningDiningDining(最大流/建图模板)[省选/NOI- ] 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料.现 ...

  9. hdu4560 不错的建图,二分最大流

    题意: 我是歌手 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

最新文章

  1. Pandas 数据挖掘与分析时的常用方法
  2. vs 2005 與vs 2003 語法比較
  3. 逆向链表c语言 abcdef,6-6 求单链表元素序号 (5 分)
  4. 2022年跨境电商新玩法:Tik Tok私域流量沉淀+电商平台流量承接
  5. php设计模式--单例模式
  6. 在Hotspot JVM中跟踪过多的垃圾回收
  7. Spring Boot MyBatis配置多种数据库
  8. iptables禁止端口和开放端口
  9. OpenSSL 创建自签名证书
  10. Memcache安全性
  11. jmeter远程启动命令_Jmeter命令行方式启动
  12. 浅析设计模式(三)——抽象工厂模式
  13. CentOS 7 最小化安装简单配置
  14. Facebook 的 PHP 性能与扩展性
  15. Hadoop问题:启动hadoop 2.6遇到的datanode启动不了
  16. Java实现QQ机器人
  17. 有监督的SAR变化检测公开数据集
  18. 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
  19. 美的vs格力 佛山 珠海
  20. 2022全新Java学习路线图动力节点(五)框架之路

热门文章

  1. 基于转移学习的图像识别
  2. 接口的特点及,抽象类与接口的区别
  3. git 入门教程之本地和远程仓库的本质
  4. 安徽池州贵池中学老师经典语录,我喷了
  5. 【T07】不要低估tcp的性能
  6. javascript与java正则表达式写法的区别
  7. Linux中mmap与munmap函数系统调用
  8. TI PDK3.0 qt 交叉编译环境设置
  9. ANT无线通信技术(2) 通道配置
  10. android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题