
网络流
LZJ209
主页:https://zongjia.li/
展开
-
【网络流24题】1.飞行员配对方案问题
二分图匹配问题,因为隶属于网络流24题,就用网络流写一下。 从源点向每个外籍飞行员连一条容量为1的流,每个外籍飞行员向可以配合的英国飞行员连一条容量为1的流,每个英国飞行员向汇点连一条容量为1的流,跑一边最大流即可。 (网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过)#include<cstdio>#include<cstd原创 2017-01-02 20:10:43 · 324 阅读 · 0 评论 -
【网络流24题】数字梯形问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这绝对是我见过最不要脸的网络流了,一道题竟然赤裸裸的让你建三个图,算了,还是耐着性子把它做完了。 我们首先要想明白的问题就是如果两条路径没有任何公共点,那么这两条路径一定不会相交,因为这道题的路径是定义在点之上的,当且仅当两条路径包含两个相同的且上下相邻的点时两条路径才有公共原创 2017-01-05 17:33:59 · 737 阅读 · 0 评论 -
【网络流24题】运输问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 非常裸的一道费用流,只不过要跑一遍最大流一遍最小流,所以这里就不赘述了,看代码吧。#include<cstdio>#include<cstdlib>#include<ctime>#include<cmath>#include<cstring>#include<stri原创 2017-01-05 17:37:06 · 333 阅读 · 0 评论 -
【网络流24题】分配问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 也是一道相当裸的网络流,自己看代码吧#include<cstdio>#include<cstdlib>#include<ctime>#include<cmath>#include<cstring>#include<string>#include<iostream>原创 2017-01-05 17:38:40 · 551 阅读 · 0 评论 -
【网络流24题】负载平衡问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这题的思路挺好的,就是说我们可以看得出来数值高于平均数和数值低于平均数是对立的状态,所以借助这种关系把这个环拆分成两半,左边的由源点向其链接一条容量为与平均值之差费用为0的流,右边的点则向汇点连,原环中相邻的点之间链接一条容量为INF,费用为1的流,这样跑一边最小费用最大流即可原创 2017-01-05 17:44:07 · 514 阅读 · 0 评论 -
【网络流24题】深海机器人问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题其实和数字梯形的第三个规律挺像的(点和路径均可重合),唯一的差别就是这道题的路径权值只能计算一次,那怎么办呢,其实不难,我们只要将容量为INF的边的权值修改为0,在此基础上再加一条容量为1,权值为给定权值的边即可。跑一边最大费用最大流就可以啦。#include<cstdi原创 2017-01-05 17:49:40 · 414 阅读 · 0 评论 -
【网络流24题】最长k可重区间集问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题可以说是经典中的经典了,我们可以这样想,由于要求包含一个点的区间最多不超过k个,那么我们就可以只给这个序列k的流量,一旦选择了一条线段就在这条线段的区间范围内减少一点流量,这样就能保证没有任何一点上面的区间会超过k个,那么具体怎么实现呢,由于我们不清楚区间的大小,所以我们原创 2017-01-05 17:56:43 · 759 阅读 · 0 评论 -
【网络流24题】最长k可重线段集问题(未解决)
这道题好多题解都说同上一题,可是这道题真的不一样啊(捂脸熊) 这题和上一题最大的不同就是这道题有一种线段叫做垂直x轴的线段,也就是有自环的存在,正常费用流在加流的时候也会造成死循环,但是后者可以解决,就是去掉from数组,而是把from信息加在边上,但是前者实在想不到怎么解决,希望会的人可以提出来。原创 2017-01-05 19:03:03 · 740 阅读 · 0 评论 -
【网络流24题】火星探险问题
由于这道题的输出太过庞大而且之前提供的oj也没有spj,无法验证代码正确性,所以这道题仅提供思路,就不附代码了,这道题其实和之前几道网格题是挺像的,只不过这道题有的地方有石头,有的地方没有石头,有的地方还不能走,那么我们就像之前的那样建图,把一个点拆分成两个点,每两个点之间连一条INF,费用为0的边,如果一个点有石头就多开出一条容量为1,费用为1的边,这样跑出最大费用最大流再在残量网络中找一找路径就原创 2017-01-05 19:12:40 · 990 阅读 · 0 评论 -
【网络流24题】骑士共存问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题一看到不能共存就知道肯定是最小割了,然后就是怎么建图的问题了,题目良心,给出了一个图,这个图已经染了色,我们可以清楚地看到按照图中的方式染色的话,一个骑士能攻击到的其他位置必定和其所在点的颜色不同,所以按照这个图的方式染色,若左面的点会攻击到右面的点,则向能攻击到的点都原创 2017-01-05 19:18:33 · 614 阅读 · 0 评论 -
BZOJ4514 [Sdoi2016]数字配对
一道费用流好题,因为跑费用流的时候每次选择的都是最大的流,所以在ans刚刚要小于零的时候统计出答案即可#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<iostream>#include<iomanip>#include<ctime>#include<cmath>#include<al原创 2017-01-01 19:51:19 · 289 阅读 · 0 评论 -
天上红绯 网络流
题目大意:给定一些点,有两个选择,每种选择会获得一个收益,还有若干个组合,每个组合也有两种选择,若这个组合中两个元素不选择同一种方案会扣掉一些收益。求最大收益。 最大权闭合子图裸题不解释,唯一值得一提的是如何表示两个点不同时选会扣掉的收益,我在考试的时候想到的办法是先让答案加上扣费,每种组合的收益加上扣费,这样的话选择其中一种相当于没有扣费,两种都不选择就相当于扣了这个费用,题解中说将两个点之间连原创 2017-02-22 13:28:37 · 673 阅读 · 0 评论 -
BZOJ 3158: 千钧一发 网络流
题目大意:给定n个数,求出和最大的一个集合使得集合中任意两个数要么满足平方和不为平方数,要么满足有大于1公因数。 题解:可以将数字按照奇偶性分成两半,因为两个奇数的平方和不可能为平方数,两个偶数有大于1的公因数,这样不能共存的两个数就位于左右两边,只要枚举两个数判断一下,如果不能共存就在中间连上一条INF,奇数向左边连费用,偶数向右边连费用,就变成了一个最小割模型。#include<cstdio>原创 2017-05-25 22:50:47 · 1311 阅读 · 0 评论 -
BZOJ 3275: Number 网络流
题解戳这原创 2017-05-30 10:54:06 · 385 阅读 · 0 评论 -
【网络流24题】星际转移问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这是我最想吐槽的一道题,至于为什么请把PDF的样例或者网站上的样例粘贴到文档中认真观看最后一个-1 -_- 网络流没写错,竟然被卡输入了。。。(捂脸熊) 这道题我们可以看得出天与天之间是独立的,而且每次状态的转移都是跨天的,所以我们可以将每一天拆分来看,(据说这叫分层图原创 2017-01-05 17:09:37 · 883 阅读 · 0 评论 -
【网络流24题】航空路线问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题我们首先要想明白的是飞机往返飞两次其实等价于两架飞机走一次,只要两架飞机的路线除出发点和结束点以外不重合即可。那么我们只要将每个点拆分成两个点,点与点之间连一条容量为1,起始点和汇点的容量为2的流即可。个人觉得最难的还是输出路径的问题,我用的方法是重新检索图中的边查看哪原创 2017-01-05 16:47:09 · 1260 阅读 · 0 评论 -
【网络流24题】太空飞行计划问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 最大权闭合子图裸题,先将所有收益加起来,源点向每个方案连接一条收益的流,每个方案向对应需要的仪器连一条INF,每个仪器向汇点连一条花费的流。 输出方案只需要在最后的阻塞流中看还剩哪几个点就好了#include<cstdio>#include<cstdlib>#includ原创 2017-01-02 20:15:48 · 372 阅读 · 0 评论 -
【网络流24题】最小路径覆盖问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题是一道经典的求一个有向无环图的最小路径覆盖,具体做法就是将一个点拆分为两个点然后跑二分图最大匹配即可,最后的答案就是总点数减去最大匹配数,同理,由于隶属于网络流24题采用网络流写法。 输出路径则只需要判断流过的流连边即可#include<cstdio>#include原创 2017-01-02 20:33:19 · 353 阅读 · 0 评论 -
【网络流24题】魔术球问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题真是一道好题! 我们可以这样想,每加入一个数就枚举这个数可以和哪几个数相互组合,这样的话我们就可以把问题转化为一个最小路径覆盖问题,算出最少需要几根柱子才能放满这几个数,显然答案具有单调性,但是这题比较特殊,二分会增大时间复杂度,相反,如果每次我们将答案增加一,在原先原创 2017-01-02 20:41:54 · 379 阅读 · 0 评论 -
【网络流24题】圆桌问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题的模型应该是有一种专业名称的,但是那都没用,思路才是最关键的。 我们从源点向每一个公司连接一条容量为公司人数的边,然后每个公司向所有餐桌连一条容量为1得边,每个餐桌向汇点连一条容量为餐桌人数上限的边,这样跑一边最大流,如果最大流等于所有公司的总人数之和,证明有解,反之无原创 2017-01-02 20:46:19 · 330 阅读 · 0 评论 -
【网络流24题】最长递增子序列问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题据说在codeforces上的数据变成了最长不降,但是本文附上的oj没有这种情况。 这道题的题意就是求出最长上升序列长度,然后每个数只能取一个的情况下最多有多少种方案能取出这么长的序列,第一个数和最后一个数无限多的时候能取出多少个。 首先第一问dp就可以了,而且数据原创 2017-01-02 20:59:53 · 1011 阅读 · 0 评论 -
【网络流24题】试题库问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题的模型很显然,源点向每个试卷连接一条容量为1的边,每个试卷向对应的类型连接一条容量为一的边,每个类型向汇点连接一条容量为需要数量的边,跑一边最大流即可。#include<cstdio>#include<cstdlib>#include<iostream>#incl原创 2017-01-03 07:02:36 · 465 阅读 · 1 评论 -
【网络流24题】方格取数问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题我认为精髓就是将整个棋盘染色,使得相邻的两个格子染色不同,相信说到这里大家都知道怎么染了,就像很多地砖的染色一样,使得染色相间分布,这样一个棋盘就变成了一个二分图,一个格子和相邻的四个格子链接一条INF,每个格子向两边链接一条数字大小的边,跑一边最小割就行了。#incl原创 2017-01-04 07:07:59 · 531 阅读 · 0 评论 -
BZOJ1070 最小费用流
这道题的思路真是神,万万没想到,给出题人跪了orzorz 我们首先要想明白的是一个人修车对答案的影响是什么,假设一个人是一个技术人员倒数第一个修车,那么它对答案的影响就是修车时间,如果是倒数第二个那么对答案的影响就是2*修车时间,以此类推,所以我们将一个技术人员拆分成m个,代表一个技术人员倒数第几次修车,让这些点分别向所有车连一条容量为一,费用为t[i][j]*k的流,从起点向每一个拆分出来的点连原创 2016-12-27 08:50:59 · 357 阅读 · 0 评论 -
BZOJ 1877 最小费用流
一道最小费用流裸题 为了防止一个点被选择两次,将一个点拆分为两个点,然后正常建图跑一边最小费用流#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<iostream>#include<iomanip>#include<ctime>#include<algorithm>#include<原创 2016-12-27 08:55:19 · 320 阅读 · 0 评论 -
BZOJ 3438 最大权闭合子图
题目大意:一些作物种在A地里会获得Ai的收益,重在B地里会有Bi的收益,如果一些作物种在一起还会获得额外的收益。 看到这样好几种选择只能选择一种的题就应该想到最小割,我们将每一个作物向A地连一条容量为Ai的流,向B地连一条容量为BI的流,然后再将每一个组合新建一个节点,从A地向其连接一条容量为收益的流,这个点组合内每一个点连一条容量为INF的流,组合和B地的连法同理,将所有收益加在一起减去最小割就原创 2016-12-27 09:04:50 · 476 阅读 · 0 评论 -
BZOJ 1711 网络流
将每个牛拆成两个牛,连一条流量为1的边,就能保证每个牛只选择一次,从源点向每一个饮料连一条容量为1的边,每个食物向汇点连一条容量为1的边,然后一只牛就表示为它喝的饮料向他自己连一条边,他自己再向吃的食物连一条边,跑一个最大流#include<cstdio>#include<cstdlib>#include<ctime>#include<cmath>#include<iostream>#in原创 2016-12-27 09:37:56 · 445 阅读 · 0 评论 -
BZOJ 1497 最大权闭合子图
这算比较裸的一道最大权闭合子图了,从源点向每个用户连一条容量为收益的边,每个用户向自己用的通讯站连一条INF,每个通讯站向汇点连一条修建费用的流,所有收益减去最小割就好啦#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<string>#include<cstring>#include<iostr原创 2016-12-27 09:15:45 · 450 阅读 · 0 评论 -
【网络流24题】餐巾计划问题
(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题是一道很经典的网络流问题,我们可以发现餐巾的状态转移要么是在今天洗掉,要么是留到下一天洗掉,洗掉之后就变成可用的餐巾,那么我们只要把每天新产生的旧餐巾和每天需要用的新餐巾分开来看我们就能够得到一个单向的网络流的图,这样就可以完成这道题了。我们设x.a为第x天用出来的旧餐原创 2017-01-05 16:38:36 · 437 阅读 · 0 评论 -
BZOJ 2400: Spoj 839 Optimal Marks 网络流
Description定义无向图中的一条边的值为:这条边连接的两个点的值的异或值。 定义一个无向图的值为:这个无向图所有边的值的和。 给你一个有n个结点m条边的无向图。其中的一些点的值是给定的,而其余的点的值由你决定(但要求均为非负数),使得这个无向图的值最小。在无向图的值最小的前提下,使得无向图中所有点的值的和最小。Input第一行,两个数n,m,表示图的点数和边数。 接下来n行,每行一个数原创 2017-06-23 21:39:15 · 419 阅读 · 0 评论