随笔分类 - OI / 网络流
摘要:问题描述 "BZOJ2007" "LG2046" 题解 发现左上角海拔为 $0$ ,右上角海拔为 $1$ 。 上坡要付出代价,下坡没有收益,所以有坡度的路越少越好。 所以海拔为 $1$ 的点,和海拔为 $0$ 的点,一定能够在这个网格图中由一条连续的线划分为两个集合。 将一个图中的所有结点划分为两个
阅读全文
摘要:问题描述 "BZOJ1001" "LG4001" 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边。 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个点。 对偶图中的每一个点,和它在平面图中每一个相邻的图形间有边,边权为原来分开它们的边的边权
阅读全文
摘要:问题描述 "LG1345" 题解 点边转化,最小割,完事。 $\mathrm{Code}$ cpp include using namespace std; template void read(Tp &x){ x=0;char ch=1;int fh; while(ch!=' '&&(ch '9'
阅读全文
摘要:问题描述 "LG1344" 题解 我太菜了,我一开始竟然没有看出这是个最小割裸题。。。 两个询问。 第一个询问,直接跑最小割就好了。 第二个询问,建图的时候边权建 $1$ ,代表割掉这条边需要 $1$ 的代价。 $\mathrm{Code}$ cpp include using namespace
阅读全文
摘要:问题描述 "LG2770" "LOG6122" 题解 教训:关掉流同步之后就不要用其他输入输出方式了。 拆点。 两个拆点之间连$(1,1)$,其他连$(1,0)$ $\mathrm{Code}$ cpp include using namespace std; void read(int &x){
阅读全文
摘要:问题描述 "LG2053" "BZOJ1070" 题解 将$m$个修理工拆为$n \times m$个,将修理工和车辆看做二分图,连出一个完全二分图。 边流量为$1$,费用为时间,费用流即可。 $\mathrm{Code}$ cpp include using namespace std; temp
阅读全文
摘要:问题描述 "LG2045" 题解 费用流。 套路拆点,把$(i,j)$拆为两个点,在这两个点之间连边:一条边流量为$1$,费用为$a_{i,j}$,另一条边为流量为$INF$,费用为$0$(表示联通)。 然后在$(i,j)$的出点向$(i+1,j)$,$(i,j+1)$连边,流量$INF$,费用$0
阅读全文
摘要:问题描述 "LG1640" 题解 一开始以为是把$(a,b)$作为左右部点,发现$n \le 1000000$,建图是$O(n^2)$的,会爆掉 属性值向$i$建边。 $\mathrm{Code}$ cpp include using namespace std; template void rea
阅读全文
摘要:问题描述 "LG2598" "BZOJ1412" 题解 看到要把狼和羊 两个 物种 分开 自然想到最小割。 发现$(x,y)$可以向上下左右走以获得贡献,所以建边:$(x,y),(x 1,y)$,$(x,y),(x,y 1)$,$(x,y),(x,y+1)$,$(x,y),(x+1,y)$(要在矩阵
阅读全文
摘要:问题描述 "LG2766" 题解 $\mathrm{Subtask 1}$ 一个求最长不下降子序列的问题,发现$n \le 500$,直接$O(n^2)$暴力DP即可。 $\mathrm{Subtask 2}$ 设$opt_i$代表区间$[1,i]$,且以$i$为结尾的最长不下降子序列。 考虑拆点,
阅读全文