首页 > 其他分享 >2.27 二分图与网络流复习

2.27 二分图与网络流复习

时间:2024-03-26 09:16:09浏览次数:24  
标签:二分 匹配 复习 覆盖 sum 最小 SCC 2.27

可能会有一些有一点用的 trick 的整理与复习。很少,很不系统。

1 Dinic 优化

  • 给 bfs 和 dfs 加上当前弧优化。但是此时要一定注意在遍历时,\(rest=0\) 退出循环需要在循环内写,而非在 for 中的条件写。

  • 对边权排序后分段。Dinic 很多时候慢是因为边权差距太大了。于是我们不断设一个 \(\lim\),从 \(\max\) 开始,不断除以一个 \(c\),然后每次加入边权 \(\ge lim\) 的边,跑一次 Dinic。在 \(c=2\) 的时候似乎复杂度可证明是 \(O(nm\log )\) 的。但是实际上 \(c\) 大一点反而更快。

  • 先对只加正向边,然后对所有正向边跑(注意此时仍然要把反向边的流量给加上去)。跑完之后再加入所有反向边跑。

  • 不要使用前向星。

个人认为上述东西不是很有用。如果正常考到应该无法使用上述方法获得更高的分数。

https://loj.ac/s/2015257

2 二分图独立集与覆盖集

  • 点覆盖为:用点覆盖边

  • 二分图最大匹配等于最小点覆盖,下面给出构造:

    1. 找到一组匹配
    2. 找到所有未匹配的左部点
    3. 从它们出发,跑增广路
    4. 未访问的左部点与访问的右部点构成最小点覆盖
    5. 大概的理解:对于匹配边两侧恰好只有一个被选,且每条边都被覆盖了。
  • 二分图的最大独立集,为最小点覆盖的补集

  • 二分图的最小边覆盖(无孤立点)大小,为最大独立集大小,下面给出构造:

    1. 所有匹配边全选
    2. 所有未匹配点随便选一条边
  • 最长反链与最小链覆盖

    1. 考虑拆点后,out 为左部点,in 为右部点,于是 \(u\to v\) 可以连边 \((out_u,in_v)\)
    2. 于是在最大匹配上的边即在链上的边,所以最小链覆盖等于 \(n-\) 最大匹配。
    3. 根据 Dilworth 那套理论,我们求出传递闭包后,最长反链等于最小链覆盖。构造只要选出 in 与 out 都属于最大独立集即可。

3 最小割可行边与必经边

  • 时间复杂度十分充裕的时候:每条边都删掉/强选跑一跑即可

  • 考虑保留所有容量非 \(0\) 的边作为残量网络 \(G'\)

  • 最小割可行边:原图满流,且 \(G'\) 不存在 \(u\to v\) 路径

  • 最小割必经边:原图满流,且 \(G'\) 存在 \(s\to u\) 与 \(v\to t\) 的路径

  • 实现方法:对 \(G'\) 跑 SCC,由于逆向边存在,所以只需要判断是否在同一 SCC 即可。

4 二分图博弈

  • 匹配可行边:为匹配边,或 \(u,v\) 在同一 SCC

  • 匹配必经边:为匹配边,且 \(u,v\) 不在同一 SCC

  • 匹配必经点:为匹配点,且与该部的源不属于同一 SCC

  • 先手必胜点,一定为匹配必经点:先手只要不断沿着匹配边走即可,而后手无法逆转

5 上下界网络流

  • 大体思路:对于每个点,考虑入边 \(\sum l_e\) 与出边 \(\sum r_e\)。如果 \(\sum l_e\) 大,那么就从新源点 \(S'\) 向这个点连 \(\sum l_e-\sum r_e\) 的边,否则就连向新汇点。然后就能以 \(r_e-l_e\) 建剩余的边了。

  • 无源汇可行流这样就能跑了,只需要源汇连接的满流即意味着流量平衡。

  • 有源汇考虑源汇可以不守恒,那么只需要建一条原汇到原源的 \(\infty\) 的边即可。

  • 考虑限制最大流。我们在新图上跑可行流,然后得到残量网络。由于已经满足流量限制,所以我们直接再在残量网络上跑 原源到原汇的流,加到答案上即可。

  • 考虑限制最小流。其实差不多,只不过我们要改成退流,即跑原汇到原源的流,然后从答案中减去即可。

标签:二分,匹配,复习,覆盖,sum,最小,SCC,2.27
From: https://www.cnblogs.com/TetrisCandy/p/18095816

相关文章

  • 代码随想录第一天-双指针+二分法
    参考资源:https://programmercarl.com/、ChatGPT3.5语言:Java二分法二分法,又称为二分查找或折半查找,是一种在有序数组中查找目标值的算法。它的基本思想是将目标值与数组中间的元素进行比较,若目标值等于中间元素,则查找成功;若目标值小于中间元素,则在数组的左半部分继续查......
  • 四 3745. 牛的学术圈 I (双指针|二分)
    四3745.牛的学术圈I(双指针|二分)思路:要到达最大h指数,此时有a1篇引用大于等于h,a2篇引用等于h-1,且满足a1+min(a2,L)大于等于h,a1、a2可使用双指针分别获取,h则可使用二分法遍历减少耗时。importjava.util.*;publicclassMain{privatestaticintN,L;priva......
  • 一 503. 借教室 (差分|二分)
    503.借教室(差分|二分)importjava.util.*;publicclassMain{privatestaticintn,m;privatestaticint[]rooms;privatestaticint[][]orders;privatestaticbooleancheck(intmid){long[]diff=newlong[n+2];f......
  • 青蛙过河(前缀+二分)
    1importjava.util.*;23publicclassMain{4publicstaticvoidmain(String[]args){5Scannerscanner=newScanner(System.in);6intn=scanner.nextInt();7longx=scanner.nextLong();8//前缀和9lo......
  • python自动化——web自动化框架常用封装代码复习——当你会开发之后,发现一切都是如此
    PS:  PO模式知识点如下: 1、知识点:函数的书写、类、继承,模块导入; 2、思路:分层,抽离;     =====================================================================          编写用例基础版本:   pytest参数化,以及原始selenium用例编......
  • 知识总结--简单复习各部件
    目录内部结构部件介绍配置步骤之前学了很多部件,配置了很多参数,但是没有很系统地把他们连接在一起,今天这个图里简洁描述了资源与资源之间的关系。内部结构部件介绍黑框部分为CPU、内部有一个内核专门处理事件,所有的电信号中断信号都由内核处理。红框:CPU与外界用引脚......
  • 蓝桥杯2017年第八届真题-分巧克力(二分算法)
    题目描述儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是HixWi的方格组成的长方形。为了公平起见,小明需要从这N块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:1.形状是正方形,边长是整数2.大......
  • 洛谷题单算法1-6二分查找与二分答案
    代码仅供参考,不足之处望理解。P2249【深基13.例1】查找#include<iostream>usingnamespacestd;constintN=1e6+5;intn,m,a[N];intmain(){ios::sync_with_stdio(false);//输入cin>>n>>m;for(inti=1;i<=n;i++)cin>>a[i];for(inti=1......
  • C105 整体二分+树状数组 P2617 Dynamic Rankings
    视频链接:C105整体二分+树状数组P2617DynamicRankings_哔哩哔哩_bilibili  C96树状数组套权值线段树P2617DynamicRankings-董晓-博客园(cnblogs.com)C104【模板】整体二分+树状数组P3834可持久化线段树2-董晓-博客园(cnblogs.com)LuoguP2617Dynamic......
  • 【专升本sql复习】sql复习
    查询张三同学没有选修的课程的课程号两张表选课,学生名字张三知道张三学的课程投影了张三学的课程的课程号所有课程号(在c表里面投影)-张三选修的课程号=张三没有选修的课程号给女员工加200工资,考了UPDATEEMPSETSALARY=SALARY*0.8WHERESALARy>2000ANDSEX=‘女......