二次联通门 : luogu P1231 教辅的组成

/*luogu P1231 教辅的组成拆点 + 最大流把书拆点后与答案与资料连边跑最大流
*/
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>#define Max 50005
#define INF 1e7using namespace std;void read (int &now)
{now = 0;char word = getchar ();while (word > '9' || word < '0')word = getchar ();while (word >= '0' && word <= '9'){now = now * 10 + word - '0';word = getchar ();}
}struct Edge
{int to;int next;int flow;
}edge[Max << 3];int Edge_Count = 1;
int edge_list[Max];inline void AddEdge (int from, int to)
{Edge_Count++;edge[Edge_Count].flow = 1;edge[Edge_Count].to = to;edge[Edge_Count].next = edge_list[from];edge_list[from] = Edge_Count;Edge_Count++;edge[Edge_Count].to = from;edge[Edge_Count].flow = 0;edge[Edge_Count].next = edge_list[to];edge_list[to] = Edge_Count;
}int N, M, Q;
int E;
int S, T;
int deep[Max];
int Answer;int Flowing (int now, int flow)
{if (flow <= 0 || now == T)return flow;int pos = 0, res = 0;for (int i = edge_list[now]; i; i = edge[i].next){if (deep[edge[i].to] != deep[now] + 1 || edge[i].flow <= 0)continue;pos = Flowing (edge[i].to, min (edge[i].flow, flow));flow -= pos;res += pos;edge[i].flow -= pos;edge[i ^ 1].flow += pos;if (flow <= 0)return res;}return res;
}int main (int argc, char *argv[])
{read (N);read (M);read (Q);read (E);M += N;Q += M;S = Max - 2;T = Max - 3;int x, y;for (int i = 1; i <= N; i++)AddEdge (i, i + Q);for (int i = N + 1; i <= M; i++)AddEdge (S, i);for (int i = M + 1; i <= Q; i++)AddEdge (i, T);for (int i = 1; i <= E; i++){read (x);read (y);AddEdge (y + N, x);}read (E);for (int i = 1; i <= E; i++){read (x);read (y);AddEdge (x + Q, y + M);}while (true){bool flag = false;memset (deep, -1, sizeof deep);queue <int> Queue;Queue.push (S);deep[S] = 0;int now;while (!Queue.empty ()){now = Queue.front ();Queue.pop ();for (int i = edge_list[now]; i; i = edge[i].next)if (deep[edge[i].to] < 0 && edge[i].flow){deep[edge[i].to] = deep[now] + 1;if (edge[i].to == T){flag = true;break;}Queue.push (edge[i].to); }if (flag)break;}if (deep[T] < 0)break;Answer += Flowing (S, INF);}printf ("%d", Answer);return 0;
}

转载于:https://www.cnblogs.com/ZlycerQan/p/6882689.html

luogu P1231 教辅的组成相关推荐

  1. luogu P1231 教辅的组成(建图、拆点、最大流)

    luogu P1231 教辅的组成 每一本书都要拆点,拆成入点和出点,因为每一本书只能匹配一次 图片来源 #include<cstdio> #include<cstring> ...

  2. [洛谷P1231] 教辅的组成

    题目大意:有n1本书,n2本练习册和n3个答案,然后又一些条件,说明某本答案可能和某本书对应,某本练习册可能和某本书对应,求最多有多少本完整的书(有书,练习册,答案) 题解:网络流,对应就连边,然后考 ...

  3. P1231 教辅的组成

    题目 题目 思路 啊,又是烦人的拆点,其实网络瘤一堆题都是拆点,本题显然要把书,练习册(53),答案(学生的福音)分开,但是,书作为中转的地方,是具有唯一性的,不能2本53都配同一本书,这时我们还需要 ...

  4. 最大流,最小割刷题记录

    T1 P2057 [SHOI2007] 善意的投票 题目 https://www.luogu.com.cn/blog/OnMyOwn/OnMyOwn https://www.luogu.com.cn/ ...

  5. 教辅的组成(网络流果题 洛谷P1231)

    题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书多得数不胜数,其中有书,有答案,有练习册.已知一个完整的书册均应该包含且仅包含 ...

  6. 【洛谷 - P1231 】教辅的组成(网络流最大流,拆点)

    题干: 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书多得数不胜数,其中有书,有答案,有练习册.已知一个完整的书册均应该包含 ...

  7. 洛谷1231 教辅的组成

    洛谷1231 教辅的组成 https://www.luogu.org/problem/show?pid=1231 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 ...

  8. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

  9. [Luogu] 选学霸

    https://www.luogu.org/problemnew/show/P2170 并查集+DP #include <iostream> #include <cstring> ...

最新文章

  1. cpu功耗排行_2020 主流手机处理器排行榜
  2. linux原理与应用期末考试,武汉大学计算机学院2009-2010学年第一学期期末考试《Linux原理与应用》期末考试试卷(共8套,有答案)...
  3. OpenStack不行了吗?悉尼峰会,OpenStack的白城反击战?
  4. mysql8.0安装问题
  5. android跳转到相册需要权限,Android打开相册获取图片路径
  6. zookeeper的会话
  7. ifpc币_劳力士手表价格表一览表
  8. C++调用matlab接口
  9. java堆栈方法区_java 栈 ,堆, 方法区
  10. linux命令完整篇
  11. java开源代码生成器_人人开源之代码生成器(renren-generator)
  12. 使用layUI弹出输入框并收集输入框信息
  13. 1.2 px30驱动移植-网卡驱动调试思路
  14. 搜狗输入法 linux 卸载,ubuntu彻底卸载搜狗拼音输入法
  15. Python Turtle绘图[难度2星]:横切的橙子(配色优化——邻近色/反差色)
  16. 华为摄像头采集自动聚焦崩溃
  17. (C++/python)LeetCode 589. N叉树的前序遍历
  18. java拼图游戏系统总体方案_基于JAVA的拼图游戏的设计与实现(含录像)
  19. 打印机服务器的系统,打印机服务器主机系统
  20. 软件开发php代码规范,php开发规范_PHP代码编写规范

热门文章

  1. BUUCTF-Reverse:内涵的软件
  2. Java泛型中的通配符?
  3. 调用函数,求1!+2!+3!+......+10!
  4. Java多线程同步Synchronized深入解析
  5. IA32中栈帧结构图
  6. C 语言运算符优先级
  7. 使用c:foreach时链接失效
  8. C++ 字符数组和String类
  9. 日常生活小技巧 -- Notepad++一次删除带指定关键字的行
  10. S5PV210开发 -- QT4.8 移植