图论 -- 网络流
Object_S
Java C++
展开
-
网络最大流
常用优化:分层时遇到汇点直接返回(一方面可以减少分层时的运算量,另一方面可以加速Dinic的运行) Dinic时无余量直接返回(如果不返回会造成大量的冗余运算) 不分层的Dinic是没有灵魂的易错点:不在汇点返回的Dinic如同被堵住的下水道.#include<cstdio>#include<iostream>#include<queue>...原创 2019-07-07 23:11:57 · 129 阅读 · 0 评论 -
P3386 【模板】二分图匹配
题目描述给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数题目地址匈牙利算法本质上是对于每个点进行dfs,并在递归的同时不断找出新的增广路. 注意点:需要使用vis数组并在每次dfs前清空,防止死循环. 模板里不需要加双向边. vis并不是增广成功才能设置,失败不设置一定会爆栈的. 在dfs的过程中累加ans会导致增广路全部被计入.Dinic算法和其...原创 2019-07-10 21:56:52 · 147 阅读 · 0 评论 -
P4001 [ICPC-Beijing 2006]狼抓兔子
题目地址易错点:必须熟练掌握当无法在该点继续流量时直接剪枝(d[x]=0)的操作. 无向图的最大流由于两边都可增广,应当全部设置为相同的容量. 特殊矩阵图的构造.#include<cstdio>#include<iostream>#include<queue>#include<cstring>using namespace...原创 2019-07-15 11:28:50 · 295 阅读 · 0 评论 -
P4174 【模板】最大权闭合子图
前置知识:相对大小的圆舞曲 —— 最小割多选一模型题目地址基本思路:最大权闭合子图的权值和等于总正权值减去最大流,即. 建图方法是S连正权值点(边权为点权),负权值点连T(边权为点权的绝对值),正负权值点相互连接(边权为INF). 证明见《最小割模型在信息学竞赛中的应用》第19页.易错点:不写余量优化的网络流等同于竭泽而渔.#include<cstdio&g...原创 2019-07-15 20:48:58 · 159 阅读 · 0 评论 -
P2756 飞行员配对方案问题
题目地址易错点:需要用pre[]数组记录方案.#include<cstdio>#include<iostream>#include<queue>#include<cstring>using namespace std;const int MAXN=1000010,MAXM=1000010;int n,s,t;struct...原创 2019-07-15 23:14:17 · 239 阅读 · 0 评论 -
P4313 【模板】最小割多选一模型
题目地址易错点: #include<bits/stdc++.h>using namespace std;const int MAXN=105*105*3;const int INF=2e9;struct Edge{ int from,to,w,nxt;}e[MAXN*10];int head[MAXN],edgeCnt=1;void addE...原创 2019-07-16 17:20:20 · 152 阅读 · 0 评论 -
相对大小的圆舞曲 —— 最小割多选一模型
例题模板地址基本思路首先,肯定是要对于每个同学进行文科与理科满意值的比对,并取较大的满意值。 接下来要考虑的是每个同学的same_art[i][j]与same_science[i][j]值。 可以想到,既然在不考虑周围同学的情况下可以利用网络流的性质进行每个独立同学的文科最大流与理科最大流进行比对,并取较大的满意值,那么完全可以把每个同学和这个同学周围的四个同学当成"绑在一条绳...原创 2019-07-16 21:09:00 · 161 阅读 · 0 评论