网络流
文章平均质量分 90
Deep_Kevin
我太弱了
展开
-
网络流详解
正题基本算法最大流算法:DinicDinicDinic费用流算法:EK+SPFAEK+SPFAEK+SPFA可行流定义:容量限制:所有边的流量不高于上界,不低于下界流量平衡:除源汇外,所有点入流量 === 出流量时间复杂度DinicDinicDinic:每次 bfsbfsbfs 分层,dfsdfsdfs 找增广路,暴力加,当前弧优化,时间复杂度 O(n2m)O(n^2m)O(n2m) 。DinicDinicDinic的时间复杂度很玄学,在大部分情况下都远远好于上面这一个复杂度,下面是两个例原创 2021-06-30 16:19:28 · 846 阅读 · 0 评论 -
Chips Challenge,UVA1104,amazing的建图+有源汇上下界最小费用最大流
正题 真是非常的amazing啊! 先说说正确做法. 由于要满足A/B的限制,考虑暴力枚举每一行每一列最多选多少个,根据这个求出当前全局最多选多少个,如果满足条件,那么更新答案. 对于行列建立二分图,源向行点连边,容量为该行的可放置部件(包括已选)的位置个数,列点向汇连边容量为该列的可放置部件(包括已选)的位置个数.枚举行列最大值t,从行点到该行对应的列点连一条容量为t的边,这条边流了多少,说明行和列各选了多少. 对于一个可放置点(x,y...原创 2020-09-18 10:20:07 · 181 阅读 · 0 评论 -
矩阵,洛谷P4194,二分+有源汇上下界可行流
正题 首先答案是有二分性的,所以我们先二分这个max. 那么我们就知道b的每行每列的取值范围了,建个二分图,左边是b的行,右边是b的列,中间的边是个完全图,上下界是[l,r],源汇到二分图的两边连行列的取值范围,然后就是一个有源汇上下界网络流的板子.#include<bits/stdc++.h>using namespace std;const int N=410;struct edge{ int y,nex,c;}s[N*N];int first...原创 2020-09-18 09:49:49 · 175 阅读 · 0 评论 -
Captain America,CF704D,有源汇上下界最小流
正题 首先我们假设全部选权值较小的颜色,将行列离散化,转化为二分图,对于一行或一列的限制来说,更改颜色数量的区间是一个范围,以此作为上下界与源汇连边,中间存在点(i,j)那么就从i向j连边,容量为1,最后看看可行的最小流是多少,就知道至少要改多少个成权值较大的颜色,才能满足方案. 输出方案我们就把中间边的编号记下来,看看有没有流量即可,有流量说明改了. 当前弧优化漏打一个&,T了半小时.#include<bits/stdc++.h>usi...原创 2020-09-18 09:48:53 · 127 阅读 · 0 评论 -
80人环游世界,洛谷P4553,有源汇上下界最小费用可行流
正题 对于每一个城市拆成入点和出点,连边就可以了用一条下界上界都为v的边来限制一个城市的经过次数,然后源点也多拆一个点出来限制只能有m个人,最后求可行流就可以(反正是最小费用,可行流和最大流没区别. 但是博主并不知道有源汇上下界最小费用最小流怎么求,倒着跑最长路?只增广权为0的路径?#include<bits/stdc++.h>using namespace std;const int N=210;struct edge{ int y,nex,f,c;...原创 2020-09-17 22:00:01 · 178 阅读 · 0 评论 -
[NOI2015]小园丁与老司机,洛谷P2304,恶心的建图+有源汇上下界最小流
正题 这题建图太恶心了,思路十分的简单,看到相同的显然可以把分层图建出来,一个流量代表一辆压路车,对于必须要走过的边就设下限流量为1,然后跑有源汇的上下界最小流就可以,但是怎么将那些边建出来呢? 每一层考虑dp,看看同层转移到这个点的答案,如果转移点在左边,那么它可以先走到最左边,然后再走到这个点,所以对于左边的任何转移点,转移的时候加上的都是左边的点数,对于右边的转移点同理. 把同层可能的转移点用vector存起来,把原来转移到该点值的下层转移点用vector存起...原创 2020-09-17 11:52:07 · 183 阅读 · 0 评论