摘要:
先连一条从汇点到源点的容量为INF的边,将其转化成无源汇点有上下界的可行流,判断是否可行 若可行的话删掉超级源点和超级汇点,再跑一遍最大流即可 cpp include include include include include include include using namespace st 阅读全文
摘要:
对于有上下界的网络流来说,我们可以分离出必要弧,然后将必要弧切开,两端分别连接源点和汇点,原图有可行解充要于源点或汇点满流. 这样求下来,只能求出可行流 cpp include include include include include include include using namespa 阅读全文
摘要:
```cpp include include include include include include using namespace std; const int MAXN=5005,MAXM=50005; int init(){ int rv=0,fh=1; char c=getchar( 阅读全文
摘要:
朴素dinic+多路增广 cpp include include include include include include using namespace std; const int MAXM=100005,MAXN=10005; int init(){ int rv=0,fh=1; cha 阅读全文
摘要:
EK算法基于增广路的思想,易于理解,但由于低效并不被经常使用 cpp include include include include include include using namespace std; const int MAXN=10005,MAXM=100005; int n,m,s,fl 阅读全文
摘要:
二分图带权最小匹配(朴素) 只要换几个不等号的方向就行,不需要变换权值的正负 cpp include include include include include using namespace std; int n,m,wei[105][105],lx[105],ly[105],match[10 阅读全文
摘要:
二分图带权最大匹配的KM算法(朴素版) cpp include include include include include using namespace std; int init(){ int rv=0,fh=1; char c=getchar(); while(c'9'){ if(c==' 阅读全文
摘要:
二分+二分图多重匹配 辣鸡ACM式读入 对于这种奇葩的读入方法,还是老老实实的用scanf吧 cpp include include include include include define RST(a) memset((a),0,sizeof((a))) using namespace std 阅读全文
摘要:
二分图多重匹配 改进版的匈牙利,加入了一个cnt数组作为找到增广路的标志 本题有一个重要的优化见注释 cpp include include include include include using namespace std; int init(){ int rv=0,fh=1; char c= 阅读全文
摘要:
传递闭包裸题 但是本题的Floyd一定要优化,不然会T cpp include include include include include using namespace std; int init(){ int rv=0,fh=1; char c=getchar(); while(c'9'){ 阅读全文
摘要:
传递闭包经典应用 奶牛的名次能确定当且仅当在它前面的牛数+在他后面的牛数==n 1 在他前面和后面的牛数可以转化成求完传递闭包后的出度和入度 cpp include include include include include using namespace std; int n,m,dis[10 阅读全文
摘要:
DAG图上可相交最小路径覆盖 先求给定DAG的传递闭包,将任意相连的两点加入二分图中,然后就是经典的不相交最小路径覆盖 所谓传递闭包就是将DAG图中任意点间的连通关系处理出来,用Floyd即可 cpp include include include include include using nam 阅读全文
摘要:
二分图求最大匹配 我们以每一个格子为边,以行和列为两个集合,那么求二分图的最大匹配数就是最多能放车的数目,那么什么是重要点呢?就是删掉后会影响最大匹配数的匹配边。 我们求出最大匹配数后,枚举匹配边,将其删掉后,从x集合的 每一个未匹配元素 出发,找增广路,如果找不到,就说明这是一个重要点。 注意:在 阅读全文
摘要:
二分图行列匹配+输出路径 经典题,当且仅当一行匹配一列的时候,符合题意。 本题的难点在于如何输出路径,我们发现这个移动的过程就是将所有匹配选择排序,在选择排序时输出路径即可 cpp include include include include using namespace std; int in 阅读全文
摘要:
二分图匹配求DAG图上的最小路径覆盖 应用了拆点的思想,将DAG图上的每一个点拆成二分图的x集合与y集合,对于一条有向边u v来说,我们在ux与vy之间连一条边,然后求二分图的最大匹配 DAG图上的最小路径覆盖数=DAG图上的顶点数 二分图最大匹配数. 这是路径不能重合的情况,对于路径可以重合的来说 阅读全文
摘要:
二分图匹配求最小点覆盖 把两个机器作为两个集合,把每个任务当做边建图.那么所求的就是二分图的最小点覆盖. 但是最开始WA了,原因在于,题目要求的是变换的次数,也就是与0连的边需要删去. cpp include include include include include using namespa 阅读全文
摘要:
二分图匹配求最小边覆盖 建图方法中的黑白染色法,题目中说信号可以覆盖相邻两个块,那么我们可以将给定的地图染成国际象棋棋盘的样子,一个黑格可以与周围的四个白格共用信号,对于城市,从每一个黑格出发,向其周围的白格连边,那么这就是一个二分图,我们的把城市抽象成了点,所以我们的目的是找到最少的边覆盖所有的点 阅读全文
摘要:
建图方法 https://wenku.baidu.com/view/63c1a01655270722192ef7c3.html 性质 http://dsqiu.iteye.com/blog/1689505 前段时间系统的学习了一下二分图匹配,收获还是蛮大的,总算是把最大匹配、点覆盖、点独立、边覆盖什 阅读全文
摘要:
利用二分图匹配求最大独立集 本题的边一定平行于坐标轴,且同向的线段一定不重合,这是经典的二分图建图方法,本题要求的是最大不重合的线段数,那就是求二分图的最大独立集,最大独立集=总点数 最大匹配数。 本题有一个坑点,就是输入的数据不一定有序,也就是x1不一定比x2小 cpp include inclu 阅读全文
摘要:
二分图匹配的匈牙利算法 这道题,如果没有硬石头的限制,那么就与 "ZJOI 2007矩阵游戏" 完全一样,但是如果有了硬石头的限制,我们就不能将整行整列作为元素建图,我们可以以硬石头为边界,将每一行、每一列分成若干段建图,然后跑二分图匹配即可。 这里我们总结一下类似问题的特征: 1. 最优性问题或判 阅读全文