网络流
huanghongxun
这个作者很懒,什么都没留下…
展开
-
BZOJ 4276 费用流+线段树构图
为什么别人22s我37s。。#include #include #include using namespace std;const int N = 205005, M = 500005;const int inf = 0x3f3f3f3f;#define FOR(i,j,k) for(i=j;i<=k;i++)struct CostFlow { int h[N]原创 2016-01-16 22:29:30 · 715 阅读 · 0 评论 -
POJ 2699 The Maximum Number of Strong Kings 最大流 枚举
待坑#include <cstdio>#include <cstring>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)using namespace std;const int inf = 0x3f3f3f3f, N = 128, M = 8192;int level[N], cnt, cur[N], v[M], w[M]原创 2016-04-09 12:01:34 · 334 阅读 · 0 评论 -
POJ 2987 Firing 最小割(最大权闭合子图)
最大权闭合子图。。。闭合子图满足在子图内的任意点在原图中存在出边总是指向该闭合子图。 如果添加了超级源汇,那么这个图由一个割被分成了两个集合[S,T],且T是闭合子图。 最小割! 让我们来推导一下最大权闭合子图的解决方法。 令xix_i表示点i是否在闭合子图中,0在,1不在。 那么答案很显然了: max{∑max{0,1−xi}⋅wi−∑<i,j>∈Emax{0,xj−xi}⋅∞}\ma原创 2016-04-09 19:42:39 · 415 阅读 · 0 评论 -
HDU 3879 Base Station 最小割
答案为 max{∑max{0,1−ui}⋅ci−∑max{ui−ai}⋅∞−∑max{ui−bi}⋅∞−∑max{0,xi}⋅pi}\max\{\sum\max\{0,1-u_i\}\cdot c_i-\sum\max\{u_i-a_i\}\cdot\infty-\sum\max\{u_i-b_i\}\cdot\infty-\sum\max\{0,x_i\}\cdot p_i\} 变形得 ∑c原创 2016-04-09 20:58:20 · 499 阅读 · 0 评论 -
BZOJ 1565 NOI 2009 植物大战僵尸 最小割 拓扑排序
#include <cstdio>#include <cstring>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)using namespace std;const int inf = 0x3f3f3f3f, N = 660, M = 800005;int level[N], cnt = 1, cur[N], v[M],原创 2016-04-09 22:58:47 · 560 阅读 · 0 评论 -
BZOJ 3571|HNOI 2014|画框|最优匹配|计算几何
求最大匹配,使得选中匹配边的权值a的和与权值b的和的积最小。考虑方案(∑ai,∑bi)(\sum a_i,\sum b_i) ,其在反比例函数ans=xyans=xy上,显然在这个函数的右上方的点都比当前方案更优,因此所有可能的答案都在这个下凸壳上,考虑枚举下凸壳上的点,发现如果我们连接下凸壳两端点,那么离连线最远且最靠近原点的点肯定在下凸壳上,因此考虑分治。 (摘自:http://blog.cs原创 2016-04-26 22:46:10 · 576 阅读 · 0 评论 -
BZOJ 2127 Happiness 最小割
很明显是最小割。。#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;++i)#define min(i,j) ((i)<(j)?(i):(j))const int inf = 0x3f3f3f3f, N = 10005, M = 300005, K = 105;int level[N], cnt = 1, cur[N], v[M], p[M],原创 2016-04-13 23:31:43 · 480 阅读 · 0 评论 -
URAL 1851|GOV-internship|最小割
一看是个巨水的最小割就来做了。给出两个字符串由0和1组成,有些位置不知道。把第二个串去匹配第一个串,贡献代价为本次失配字符数。如何决定这些不知道的位置使总代价最小。可以发现不知道位置只有两种状态:0和1,考虑最小割。 令xix_i表示’?’ 那么答案就显而易见了 min{∑max{0,xi−0}⋅(匹配到的0的个数)+∑max{0,1−xi}⋅(匹配到的1的个数)+∑|x−xj|⋅(匹配到?的原创 2016-04-25 16:33:15 · 863 阅读 · 0 评论 -
BZOJ 4514|SDOI 2016|数字配对|筛法|费用流
任意两个符合条件的数字,指数之和只差1,因此形成了二分图,每个点的可选择次数为bib_i,因此考虑费用流, <s→i,cap:bi,cost:0>(ai的指数之和为奇数<s\rightarrow i, cap: b_i,cost:0>(a_i的指数之和为奇数 <i→t,cap:bi,cost:0>(ai的指数之和为偶数)<i\rightarrow t,cap:b_i,cost:0>(a_i的指数原创 2016-04-28 15:43:46 · 759 阅读 · 0 评论 -
BZOJ 3504 CQOI 2014 危桥 最大流
因为是双向的,因此来回an次和单向走2*an次是等价的。。 然后构图跑最大流即可。 危桥容量2,普通的容量inf。然后流的方向可能有问题。。 如果a1跑到b2就搞笑了。倒过来做一下就好听说是SHOI 2016 Day2 T3。。。。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;con原创 2016-04-18 20:52:14 · 615 阅读 · 0 评论 -
BZOJ 3130 SDOI 2013 最大流
Bob:显然使流量最大的边,费用为p即可。Alice:二分最大边。#include #include #include #include using namespace std;const int N = 1005, M = 2005;namespace Graph { int head[N], next[M], to[M], vis[N], cur[N], level原创 2016-01-17 18:12:40 · 494 阅读 · 0 评论 -
BZOJ 1391|CEOI 2008|Order|最小割
令ti=0t_i=0表示执行任务ii,xi=0x_i=0表示购买机器ii,xi=1x_i=1表示租机器ii或啥也不干。 然后答案有: max{∑max{0,1−ti}⋅Ti−∑max{0,xj−ti}⋅di,j−∑max{0,1−xj}⋅aj} \max\{\sum\max\{0,1-t_i\}\cdot T_i-\sum\max\{0,x_j-t_i\}\cdot d_{i,j}-\sum\m原创 2016-04-20 16:28:51 · 401 阅读 · 0 评论 -
机房水题欢乐赛 2016-04-21 上午 图论
水炸了。。Asteroids【题目描述】N*N的方阵中有k个怪兽,每开一枪可以杀死一行或者一列中的所有怪兽。至少要开多少枪。【输入描述】第一行n,k 接下来k行,每一行一个坐标,表示对应的位置有怪兽【输出描述】一行为答案【输入样例】3 4 1 1 1 3 2 2 3 2【输出样例】2【样例解释】输入如下 X.X .X. .X. X表示怪兽所在位置【数据约定】100%数据:N<原创 2016-04-23 11:50:18 · 407 阅读 · 0 评论 -
BZOJ 3218|UOJ 77|A + B Problem|最大流|可持久化线段树
吐槽A这题目真的很吸引人233。 样例不能复制真是可惜233。 题目的方格染色以及奇怪的节点让我想起了以前看过的一篇博文,讲最小割的。。 于是这道题就最小割。。。题解好吧假设我们不知道这道题要最小割,睁眼说瞎话 看着题目给的式子我们需要对它做♂点事情。 max⎧⎩⎨⎪⎪∑i黑bi+∑i白bi−∑i奇怪pi⎫⎭⎬⎪⎪ \max \left\{ \sum_{i黑}b_{i}+\sum_{i白}原创 2016-01-13 13:16:39 · 1734 阅读 · 0 评论 -
UVALive 7152 Catering (有上下界的)费用流
有n+1个点的图,点编号是从0到n,有k个机器在0号点。一个机器可以从编号小的可以往编号大的走,反之不行。机器可以经过很多点。若有一个点被某个机器经过,那么这个点就被处理。对于每个点都可以通往编号比它大的点,都需要一定的花费。求让所有点都被处理的最小花费。输入格式:输入文件包含多组数据,对于每组数据,先是n,k,接下来n行每行描述一个点的情况,先是0号点到1、2、….、n号点的花费,然后是1号点到2原创 2016-04-19 11:53:28 · 755 阅读 · 0 评论 -
Petrozavodsk Summer Training Camp 2017, Warsaw U Contest
C: Painting题目大意你有数字1~n,对于每个数字i,用且仅用一次刷子将某个区间修改为i。每次刷子的代价为区间长度。总代价最大是多少? 比如刷后的数列是2 1 2 3,那么可以:[1,4]=3,[1,3]=2,[2,2]=1。总共代价为8是最大的。题解首先我们可以搞出区间的包含关系,那么对于被一个区间包含的一些区间,如果不和其他子区间邻接,那么就只能修改这个子区间,否则若...原创 2018-03-19 00:22:15 · 676 阅读 · 0 评论 -
2017 ACM-ICPC Hua-Lien Regional
A: Smooth Sequences如果一个序列是光滑的仅当相邻元素差的绝对值不超过d。称一个序列是半光滑的仅当修改至多一个元素使得序列变得光滑。给定序列询问是否光滑。题解半光滑的有3种情况,一种是连续两端差均不满足d,这种判断两端点差不超过2d即可,一种是一端的差不满足d,随便改,一种是中间某段不满足d,判断修改左右端点即可。#include &lt;bits/stdc...原创 2018-05-01 17:24:05 · 1155 阅读 · 1 评论 -
URAL 1833|Hopes of Rowing|最小割
题目大意现在有 n 个点,每个点需要给一个权值。有 m 条边,每条边需要满足两端点的权值和至少为 k,问一种权值方案使得所有点的权值和最小。题解其实这道题用 KM,用 Hungary 都能做。这里只提提最小割的做法。现在有一个结论:每个点的权值只有 3 种取值:0,k2,k0,\frac{k}{2},k0,2k,k。显然如果某个点的相邻的点很多,而且至少有 2 个这中没有其他的相邻点的点...原创 2018-10-05 12:32:26 · 506 阅读 · 1 评论 -
POJ 3084 Panic Room 最小割
有一些房间靠门连通,如果门被锁起来那么门就是单向的,否则是双向的,求最少锁起来的门数使某些房间和另外一个房间不连通。最小割。。#include <cstdio>#include <cstring>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)using namespace std;const int inf = 0x3f3f原创 2016-04-09 11:07:06 · 451 阅读 · 0 评论 -
POJ 2455 Secret Milking Machine 最大流 二分答案
源汇为1,n的无向图求最小的路径上最大边使存在T条不重叠的路连通源汇。显然二分答案最大边长,判定时只加入满足最大边长的边。注意是无向边。。数据:http://contest.usaco.org/FEB05_6.htm#include <cstdio>#include <cstring>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i原创 2016-04-09 10:42:15 · 709 阅读 · 0 评论 -
POJ 2112 Optimal Milking 最大流 二分答案
有K个能挤M头奶牛的挤奶机和C头奶牛,告诉一些挤奶机和奶牛间距离,求最优分配方案使最大距离最小。显然是二分答案。接下来考虑如何判定。 为了限制挤奶机发给m头牛,以及一头牛只能分配给1台挤奶机,源点连向挤奶机,容量m,牛连向汇点,容量1,距离小于二分的最大距离的 挤奶机-牛 对,连边,容量1(其实设成多大都无所谓的),跑出来最大流=c(满流?)说明方案可行。#include <cstdio>#in原创 2016-04-09 10:09:13 · 673 阅读 · 0 评论 -
BZOJ 3774 最优选择 最小割
惊了我竟然排Rank 2,咸鱼有朝一日也能翻身。1A 先留个坑#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 5005, M = N * 10, inf = 0x3f3f3f3f;namespace Graph { int head[N], next[原创 2016-01-18 23:06:06 · 441 阅读 · 0 评论 -
BZOJ 3894 文理分科 最小割
以前写的代码,准备重新写一遍。。#include <cstdio>#include <cstring>#include <queue>#define FOR(i,1,n) for(i=1;i<=n;i++)#define M 30300#define S 0#define T 30299#define INF 0x3f3f3f3f#define P(i,j) ((i)*n-n+(j)原创 2016-01-19 14:18:11 · 441 阅读 · 0 评论 -
BZOJ 3996 TJOI 2015 线性代数 最小割
一开始没看出来是最小割。。 听说是经典的最小割模型,是我太弱了。 max⎧⎩⎨⎪⎪∑(i,j)aiajbi,j−∑aici⎫⎭⎬⎪⎪\max \left\{ \sum_{(i,j)} a_ia_jb_{i,j}-\sum a_ic_i \right\} max{∑max{0,xi,j}⋅bi,j−∑max{0,xi,j−ai}⋅∞−∑max{0,xi,j−aj}⋅∞−∑max{0,ai}⋅ci原创 2016-01-18 20:46:27 · 728 阅读 · 0 评论 -
BZOJ 3144 HNOI 2013 切糕
题解首先我们不考虑其它,如果这个切糕只有1∗1∗r1*1*r,我们的线性规划式可以表示成: min{∑max{0,xi−xi−1}⋅vi+∑max{0,1−xn}⋅∞} \min \left\{ \sum \max\{0,x_i-x_{i-1}\}\cdot v_i+ \sum \max\{0,1-x_n\}\cdot \infty \right\} 令 x0=0x_0=0,即源点。 这样子可原创 2016-01-17 22:55:04 · 692 阅读 · 0 评论 -
BZOJ 1797 AHOI 2009 Mincut 最小割
我太弱了,每次排名都超后。奇怪了,好像以前看过这题但bzoj上没有记录。在残余网络上求强联通。问题1:如果一条边满流,那么这条边可能是最小割的边集。问题2:如果一条边两端点分别在S与T集,那么这条边就是割边,必须选取。#include #include #include using namespace std;const int N = 4005, M =原创 2016-01-17 16:55:53 · 464 阅读 · 0 评论 -
BZOJ 3218 a + b Problem 最大流 + 可持久化线段树
这题目真的很吸引人233。题目的方格染色以及奇怪的节点让我想起了以前看过的一篇博文,讲最小割的。。于是这道题就最小割。。。先留个坑。。为什么别人的程序都这么快。。应该不是这么写的吧。。真的是痛苦。。各种脑抽写错,程序重写了2遍。。原来SegTree的缺省构造函数里面包括了自增id,然而operator new里面定义的大数组也会自增id。原创 2016-01-12 20:55:05 · 639 阅读 · 0 评论 -
BZOJ 2502 清理雪道 有上下界的网络流
求DAG最少用多少条链覆盖完。 建立源汇连接入出度为0的点。 然后对于每条边,下界为1,上界为无穷大。 跑一次有上下界的最小流即可。 二分答案转化为判定性问题。 由于建立了超级源汇以后要建一条反向边,上界为总流量。 于是二分答案即可,判定转化以后的无源汇上下界网络流是否存在可行流即可。代码写的有点复杂了。求建议?#include <cstdio>#include <cstring>#原创 2016-03-15 22:42:05 · 461 阅读 · 0 评论 -
POJ 2396 Budget 有上下界的可行流
求矩阵填数可行方案,给定每行每列和,和格子数字大小约束。 即: ∑jaij=ci; ∑jaji=ri; aij {>|<|=} dij \sum_j a_{ij}=c_i;\ \sum_j a_{ji}=r_i;\ a_{ij}\ \{>|<|=\}\ d_{ij} 对比一下有上下界的网络流线性规划表达: ∑vfsv=∑vfvt∑vfuv=∑vfvuluv≥fuv≥huv \sum_v f_{原创 2016-03-18 18:31:33 · 413 阅读 · 0 评论 -
BZOJ 3876 AHOI 2014 支线剧情 有上下界的费用流
给定带费用DAG,求从点1出发,最优路径覆盖所有边。 于是有上下界的费用流。。 点1是源点,另外建汇点,使所有点连向汇点,边权无限大,费用0。 跑一次有上下界的费用流即可。下界边:S->j,容量1,费用t,i->T,容量为1下界入出差,费用为0; 原图边:i->j,容量无穷大,费用为t; 原图边:i->j, 变换为无源汇:建立汇点到源点1的边,容量无穷大,费用为0。 发现实际上源点1和原创 2016-03-19 13:55:42 · 602 阅读 · 0 评论 -
POJ 1273 USACO 93 Drainage Ditches 最大流
先拉低一波文章质量(文章质量早已不行了。。)#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int inf = 2147483647, N = 210, M = 40005;int level[N], n, cnt = 0, v[M],原创 2016-04-04 00:19:38 · 499 阅读 · 0 评论 -
POJ 1459 Power Network 最大流
还记得这是第一次参加市选的题目。。 初一那时候Dinic调不出来。。。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int inf = 2147483647, N = 210, M = 40005;int level[N], n,原创 2016-04-04 00:55:34 · 529 阅读 · 0 评论 -
POJ 1966 Cable TV Network 最小割
求无向图的最小点割集?最近有点神经质,什么都想用数学求解。。。最优方案显然是割点集合将图分为两部分。 因此考虑为每个点标号,可以划分为S集合、T集合、以及两个都在。 两个集合都在的点即属于割点集。 标号S集合的为0、T集合的为1,但是割点不容表示,因此每个点需要两个变量来表示:x′ix_i'表示是否在S集合,0表示在;x″ix_i''表示是否在T集合,1表示在。 对于每条边,显然边的两端点必原创 2016-04-04 15:08:14 · 543 阅读 · 0 评论 -
POJ 1815 Friendship 最小割
和POJ 1966差不多? http://blog.csdn.net/huanghongxun/article/details/51056665#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int inf = 0x3f3f3f3f, N = 405, M = 10005;in原创 2016-04-04 17:44:49 · 518 阅读 · 0 评论 -
POJ 1149 PIGS 最大流
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int inf = 2147483647, N = 1005, M = 10005;int level[N], n, cnt = 0, v[M], w[M], p[M], h[N], q[原创 2016-04-05 11:10:02 · 304 阅读 · 0 评论 -
POJ 1637 Sightseeing tour 最大流
判断混合图是否是欧拉图。一个有向图是欧拉图if and only if每个节点的入度=出度。 由于一条无向边只能通过一次,最终经过这条边的时候总会有个方向,如果能为每条无向边定方向,使图满足上述条件那么混合图就存在欧拉图。可以先随便定向,然后找出需要改向的边,使最终出入度相等。显然存在出入度差不为偶数的点的图不可能是欧拉图。那么此时对于每个点存在入度与出度,表示为inx;outxin_x;out_原创 2016-04-05 21:02:14 · 520 阅读 · 0 评论 -
HDU 4888/4975 最大流
#include #include #include using namespace std;const int inf = 0x3f3f3f3f, N = 10005, M = 600005;int level[N], cnt, v[M], w[M], p[M], h[N], q[M], s, t;void add(int a, int b, int c) { p[++cn原创 2016-04-06 15:20:28 · 369 阅读 · 0 评论 -
BZOJ 3931 CQOI 2015 网络吞吐量 最大流 最短路
有点迷的题目。。。。#include <cstring>#include <cstdio>#include <algorithm>#include <queue>using namespace std;#define ms(i,j) memset(i,j,sizeof(i))#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 3000,原创 2016-04-06 23:52:41 · 612 阅读 · 0 评论 -
TopCoder SRM 590 FoxAndCity | 2017 ICPC Xian E
题目大意给定一个无向图,每条边的边权固定为 1,现在你可以自己加一些边权也为 1 的边,最小化∑i=1n(Ai−disti)2 \sum_{i=1}^n (A_i-dist_i)^2 i=1∑n(Ai−disti)2其中 distidist_idisti 表示第 i 个点到 1 的最短路长度。题解现在我们要最小化 ∑i=1m(Ai−disti)2\sum_{i=1}^m (A_i...原创 2018-10-26 21:44:54 · 570 阅读 · 0 评论