luogu P1231 教辅的组成(建图、拆点、最大流)
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 教辅的组成(建图、拆点、最大流)相关推荐
- luogu P1231 教辅的组成
二次联通门 : luogu P1231 教辅的组成 /*luogu P1231 教辅的组成拆点 + 最大流把书拆点后与答案与资料连边跑最大流 */ #include <algorithm> ...
- 【POJ - 3281】Dining(拆点建图,网络流最大流)
题干: Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she wi ...
- 【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 ...
- luogu P4258 [WC2016]挑战NPC(一般图的最大匹配,带花树,建图、拆点技巧)
整理的算法模板合集: ACM模板 luogu P4258 [WC2016]挑战NPC 如果是一堆球一堆筐,每一个筐里只能放一个球,求最大能放多少个球, 那么就是一个二分图的最大匹配问题,非常简单,我们 ...
- 2016 计蒜之道 复赛 菜鸟物流的运输网络【拆点+思维建图+网络流】
菜鸟物流的运输网络 菜鸟物流有自己的运输网络,网络中包含 nn 个城市物流集散中心,和 mm 对城市之间的运输线路(线路是双向的).菜鸟物流允许淘宝卖家自行确定包裹的运输路径,但只有一条限制规则:不允 ...
- POJ 3281 -- Dining(最大流,拆点建图)
题目链接 Description Cows are such finicky eaters. Each cow has a preference for certain foods and drink ...
- P4619 [SDOI2018]旧试题(莫比乌斯反演,建图优化三重枚举,三元环计数,神仙好题,超级清晰易懂)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4619 [SDOI2018]旧试题(莫比乌斯反演,三元环计数) Problem 计算: ∑i=1A ...
- 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)
B.POJ 3281 DiningDiningDining(最大流/建图模板)[省选/NOI- ] 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料.现 ...
- hdu4560 不错的建图,二分最大流
题意: 我是歌手 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...
最新文章
- Pandas 数据挖掘与分析时的常用方法
- vs 2005 與vs 2003 語法比較
- 逆向链表c语言 abcdef,6-6 求单链表元素序号 (5 分)
- 2022年跨境电商新玩法:Tik Tok私域流量沉淀+电商平台流量承接
- php设计模式--单例模式
- 在Hotspot JVM中跟踪过多的垃圾回收
- Spring Boot MyBatis配置多种数据库
- iptables禁止端口和开放端口
- OpenSSL 创建自签名证书
- Memcache安全性
- jmeter远程启动命令_Jmeter命令行方式启动
- 浅析设计模式(三)——抽象工厂模式
- CentOS 7 最小化安装简单配置
- Facebook 的 PHP 性能与扩展性
- Hadoop问题:启动hadoop 2.6遇到的datanode启动不了
- Java实现QQ机器人
- 有监督的SAR变化检测公开数据集
- 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
- 美的vs格力 佛山 珠海
- 2022全新Java学习路线图动力节点(五)框架之路
热门文章
- 基于转移学习的图像识别
- 接口的特点及,抽象类与接口的区别
- git 入门教程之本地和远程仓库的本质
- 安徽池州贵池中学老师经典语录,我喷了
- 【T07】不要低估tcp的性能
- javascript与java正则表达式写法的区别
- Linux中mmap与munmap函数系统调用
- TI PDK3.0 qt 交叉编译环境设置
- ANT无线通信技术(2) 通道配置
- android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题