二次联通门 : LibreOJ #6000. 「网络流 24 题」搭配飞行员

  1. /*
  2. LibreOJ #6000. 「网络流 24 题」搭配飞行员
  3.  
  4. 二分图最大匹配
  5. Dinic最大流 + 当前弧优化
  6.  
  7. */
  8. #include <cstring>
  9. #include <cstdio>
  10. #include <queue>
  11.  
  12. #define Max 10000
  13. #define INF 1e5
  14.  
  15. int read (int &now)
  16. {
  17. now = ;
  18. register char word = getchar ();
  19. while (word < '' || word > '')
  20. word = getchar ();
  21. while (word >= '' && word <= '')
  22. {
  23. now = now * + word - '';
  24. word = getchar ();
  25. }
  26. if (now >= )
  27. return ;
  28. }
  29.  
  30. inline int min (int a, int b)
  31. {
  32. return a < b ? a : b;
  33. }
  34.  
  35. class Net_Flow_Type
  36. {
  37.  
  38. private :
  39.  
  40. int __to[Max << ], __next[Max << ];
  41.  
  42. int __flow[Max << ];
  43.  
  44. int edge_list[Max];
  45. int Edge_Count;
  46.  
  47. int deep[Max], __tech_[Max];
  48. int T;
  49.  
  50. int Answer;
  51.  
  52. public :
  53.  
  54. Net_Flow_Type ()
  55. {
  56. Edge_Count = ;
  57. }
  58.  
  59. inline void Insert_edge (int from, int to)
  60. {
  61. Edge_Count ++;
  62.  
  63. __to[Edge_Count] = to;
  64. __next[Edge_Count] = edge_list[from];
  65. edge_list[from] = Edge_Count;
  66.  
  67. Edge_Count ++;
  68.  
  69. __to[Edge_Count] = from;
  70. __next[Edge_Count] = edge_list[to];
  71. edge_list[to] = Edge_Count;
  72.  
  73. __flow[Edge_Count - ] = ;
  74. __flow[Edge_Count] = ;
  75. }
  76.  
  77. bool Bfs (int Start, int End)
  78. {
  79. std :: queue <int> Queue;
  80.  
  81. Queue.push (Start);
  82. memset (deep, -, sizeof deep);
  83.  
  84. int now;
  85. for (deep[Start] = ; !Queue.empty (); Queue.pop ())
  86. {
  87. now = Queue.front ();
  88.  
  89. for (int i = edge_list[now]; i; i = __next[i])
  90. if (__flow[i] && deep[__to[i]] == -)
  91. {
  92. deep[__to[i]] = deep[now] + ;
  93. if (__to[i] == End)
  94. return true;
  95. Queue.push (__to[i]);
  96. }
  97. }
  98.  
  99. return deep[End] != -;
  100. }
  101.  
  102. int Flowing (int now, int flow)
  103. {
  104. if (now == T || flow <= )
  105. return flow;
  106.  
  107. int res = , pos = ;
  108. for (int i = __tech_[now]; i; i = __next[i])
  109. {
  110. if (deep[__to[i]] != deep[now] + || __flow[i] <= )
  111. continue;
  112. res = Flowing (__to[i], min (flow, __flow[i]));
  113.  
  114. if (res > )
  115. {
  116. flow -= res;
  117. pos += res;
  118.  
  119. __flow[i] -= res;
  120. __flow[i ^ ] += res;
  121. if (__flow[i])
  122. __tech_[now] = i;
  123.  
  124. if (flow == )
  125. return pos;
  126. }
  127. }
  128. return pos;
  129. }
  130.  
  131. int Dinic (int Start, int End)
  132. {
  133. for (T = End; Bfs (Start, End); )
  134. {
  135. memcpy (__tech_, edge_list, sizeof edge_list);
  136.  
  137. Answer += Flowing (Start, INF);
  138. }
  139.  
  140. return Answer;
  141. }
  142.  
  143. };
  144.  
  145. int N, M;
  146. Net_Flow_Type Make;
  147.  
  148. int main (int argc, char *argv[])
  149. {
  150. read (N);
  151. read (M);
  152.  
  153. int S = N + , T = N + ;
  154.  
  155. for (int i = ; i <= M; i ++)
  156. Make.Insert_edge (S, i);
  157.  
  158. for (int i = M + ; i <= N; i ++)
  159. Make.Insert_edge (i, T);
  160.  
  161. for (int x, y; scanf ("%d %d", &x, &y) == ; Make.Insert_edge (x, y));
  162.  
  163. printf ("%d", Make.Dinic (S, T));
  164.  
  165. return ;
  166. }

LibreOJ #6000. 「网络流 24 题」搭配飞行员的更多相关文章

  1. LibreOJ #6000. 「网络流 24 题」搭配飞行员 最大匹配

    #6000. 「网络流 24 题」搭配飞行员 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  2. 【刷题】LOJ 6000 「网络流 24 题」搭配飞行员

    题目描述 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭 ...

  3. Loj #6000.「 网络流 24 题 」搭配飞行员

    解题思路 考虑如何建模. 既然是网络流,那么肯定要有源点和汇点.而这个题目并没有什么明显的源点和汇点. 想一想,如果一个飞机能够起飞的话,那么必定有一对可以配对的正副驾驶员.也就是说一条曾广路能够上必 ...

  4. LOJ6000 - 「网络流 24 题」搭配飞行员

    原题链接 题意简述 求二分图的最大匹配. 题解 这里写的是匈牙利算法. 表示节点的当前匹配. 为真表示在这一轮匹配中,无法给节点一个新的匹配.所以如果为真就不用再dfs它了,直接continue就好. ...

  5. [日常摸鱼]loj6000「网络流 24 题」搭配飞行员

    题面 应该是二分图匹配,不过我写的是网络最大流. dinic求二分图最大匹配:加个源点和汇点,源点连向二分图的一边所有点,二分图的另一边所有点连向汇点,很明显这样得到的最大流就是这个二分图的最大匹配. ...

  6. LibreOJ #6002. 「网络流 24 题」最小路径覆盖

    #6002. 「网络流 24 题」最小路径覆盖 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

  7. LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集

    #6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   ...

  8. LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题

    #6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  9. LIbreOJ #6011. 「网络流 24 题」运输问题 最小费用最大流

    #6011. 「网络流 24 题」运输问题 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

随机推荐

  1. S03_CH09_DMA_4_Video_Switch视频切换系统

    S03_CH09_DMA_4_Video_Switch视频切换系统 9.1概述 本例程详细创建过程和本季课程第一课<S03_CH01_AXI_DMA_LOOP 环路测试>非常类似,因此如果 ...

  2. 数据库设计_ERMaster安装使用_PowerDesigner数据设计工具

    数据库设计 1. 说在前面 项目开发的流程包括哪些环节 需求调研[需求调研报告]-- 公司决策层 (1) 根据市场公司需求分析公司是否需要开发软件来辅助日常工作 (2) 公司高层市场考察,市场分析,决 ...

  3. B-JUI文档、下载

    概述 特别说明 本文档仅适用于最新版的B-JUI,网站首页或下载页可以查看B-JUI的最后更新时间. B-JUI前端管理框架适用于快速开发各类WEB管理系统,可与任意后端程序(java.php..ne ...

  4. HTML 禁止复制文字

    因为本人平时喜欢看网络小说,但是喜欢看的文通过正经网站或者app都需要收费,让人很是不爽,所以...总之,百度网盘上资源很多.但是问题来了,这些资源肯定不会是作者自己流出的,也不应该是网站或app流出 ...

  5. (十一)Activitivi5之流程控制网关:连线

    一.案例 1.1 需求 我们希望如果是重要情况才需要班主任审批,否则班长审批就行. 1.2 案例 当流程走到“班长审批”任务节点的时候,如果是一般情况,则如下: /** * 完成任务 */ @Test ...

  6. office2016激活码 最新各个版本 激活

    office2016专业版激活密钥 Microsoft Office 2016 Pro Plus Retail 零售版序列号密钥: BHXN7-MQB36-MTHQ4-8MHKV-CYT97 Micr ...

  7. c# 163网易发送邮件

    是4.0的,说以添加包是 代码: public class SendEmailInfo { /// <summary> /// 发送邮件 /// </summary> /// ...

  8. ES6--JavaScript扩展知识点(let、const、解构)

    一,ES2015(ES6)新增了两个声明变量的关键字:let.const let:只在代码块内{}有效,不可重复声明,不会提前初始化 1.只在代码块内有效 { let a = 1; var b = 2 ...

  9. form-create教程:移除默认提交按钮

    本文将介绍form-create如何修改,隐藏默认提交按钮 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue 组件.结 ...

  10. vue去哪儿网项目环境配置

     一.首先安装node.js 根据自己的(windows或mac)系统进行安装node,在开发环境中一般安装LTS版本.安装成功后,在终端输入"node -v"和"npm ...