图论
dinlon
这个作者很懒,什么都没留下…
展开
-
P6378 [PA2010] Riddle(2-sat/前后缀优化建图)
P6378 [PA2010] Riddlen个点m条边的无向图,分为k个部分,从每个部分选择恰好一个关键点,使得每条边至少有一个端点是关键点。首先有这么多的限制,实际上就是一个选或者不选的问题,每条边的限制相当于一个不选就必须选另一个,每个部分的限制就是一旦选择某一个就不能选其他的,所以可以很好地用2-sat来表示。现在还有一个问题就是如何满足恰好一个关键点,如何避免不选的情况,但是发现如果不选说明这部分点之间没有连边,否则就必须选了,那么我们就可以任选一个点作为关键点,不影响答案。然后考虑部分限制原创 2021-03-02 22:03:54 · 252 阅读 · 0 评论 -
CF429E Points and Segments(欧拉回路)
CF429E Points and Segments给定n 条线段[li,ri][l_i,r_i][li,ri] ,然后给这些线段红蓝染色,求最后直线上上任意一个点被蓝色及红色线段覆盖次数之差的绝对值不大于1首先见到绝对值不大于1我们就容易想到欧拉回路,因为欧拉回路可以用来构造恰好相等,然后通过一些另加的边或者已经有的其他限制就可以构造出绝对值小于等于1,然后考虑先将n条线段离散化,将其转化为左闭右开的形式,然后排序去重,这样每个节点就对应了一种线段覆盖状态,总的点数是O(n)O(n)O(n)级别的原创 2021-03-02 09:40:57 · 163 阅读 · 0 评论 -
无向图三元环计数
无向图三元环计数这个做法的思想还是很巧妙的,首先我们考虑枚举,暴力的方法就是枚举三个点O(n3)O(n^3)O(n3),枚举一个点然后枚举出边,然后再枚举出点的出边,然后考虑这个做法的复杂度。对于每条边分析,它会对复杂度的贡献就是指向的点的度数,所以总复杂度就是∑i=1mdegpi\sum_{i=1}^mdeg_{p_i}∑i=1mdegpi,但是如果我们能够把无向图变为有向图就可以优化复杂度,如果这个有向图没有环,那么所有无向图中的环对应了有向图中的<u,v><u,w>&l原创 2021-02-27 11:13:43 · 645 阅读 · 0 评论 -
省选前网络流练习
E - CurvyonRails棋盘模型有两种处理方法。第一种就是将行列分开处理,然后相互连边,就可以构成一个二分图。第二种方法就是将格子上所有点按照i+j的奇偶性分开处理,同样会形成一个二分图,然后就可以处理棋盘上的一些路径问题。对于这道题给定一些空地和关键点,要求一条路径将所有空地填满,并且每个格子恰好和相邻的四个格子中两个相连,并且要求关键点走直线的状态尽量少。首先利用棋盘模型建立二分图,然后源点向奇点连流量为2的边,奇点向偶点连流量为1的边,偶点向汇点连流量为2的边,跑出来满流则存在路径。原创 2021-02-23 12:19:25 · 82 阅读 · 0 评论 -
变量(网络流模型)
变量首先最终答案的形式一定是每个变量前面对应一个系数,然后加上一些绝对值,由于每个变量只有两种取法,所以我们考虑使用最小割处理,对于每个变量建一个点分别连到S和T,然后表示选择取哪个,然后会有一边是负边权可以通过两边同时加一个权值,最后在减掉转化为都是正的的情况。然后绝对值就相当于两个变量取值不同时产生一定的贡献,所以则直接在两个点之间连边即可。然后条件限制小于等于就是不能出现大于的情况,连接一条INF的单向边即可,等于就连接INF的双向边,小于就强制一个是W一个是-W,所以分别把一边改为INF即可原创 2021-02-19 19:01:09 · 92 阅读 · 0 评论 -
P4897 【模板】最小割树(Gomory-Hu Tree)(网络流/最小割/树形结构)
P4897 【模板】最小割树(Gomory-Hu Tree)这个算法可以用来求解一个无向图上任意两点的最小割,具体过程就是每次选择两个点求最小割,然后在一个新图中这两个点连边,然后对于这两个点的连通块分别递归处理,可以发现这样得到的一定是一个树,然后两个点的最小割等于这两个点在树链上的边权最小值,可以倍增求解。具体证明:https://www.cnblogs.com/birchtree/p/10761585.html...原创 2021-01-26 16:34:45 · 151 阅读 · 0 评论 -
P4126 [AHOI2009]最小割(网络流/最小割)
P4126 [AHOI2009]最小割求解一张有向图中关于最小割的可行边和必须边,可行边定义为存在一种最小割包含这条边,必须边定义为任意一种最小割包含这条边。可行边的条件:满流对于边<u,v>不存在一条路径从v到u必须边的条件:满流...原创 2021-01-25 23:49:37 · 98 阅读 · 0 评论 -
上下界网络流
上下界网络流无源汇上下界可行流首先将所有边的流量下界流满,然后按照流量守恒,建立源点和汇点,源点连向入度大于出度的点,出度大于入度的点连向汇点,然后跑最大流,如果能够流满,则说明存在可行流,否则不存在。有源汇上下界可行流连接一条从T到S的INF边,然后跑无源汇上下界可行流,这样可行流的流量等于T到S这条边流过的流量。有源汇上下界最大流先跑有源汇上下界可行流,然后再从S到T跑最大流,上下界最大流=可行流+最大流有源汇上下界最小流先跑有源汇上下界可行流,然后再从T到S跑最大流,最小流等于可行流-原创 2021-01-24 18:52:07 · 11 阅读 · 0 评论 -
P4249 [WC2007]剪刀石头布(网络流/费用流)
P4249 [WC2007]剪刀石头布在一个竞赛图上一些边的方向已经确定,但是还有一些边的方向没有确定,求解最多有多少三元环。首先看到三元环个数,按照套路我们利用度数计算,然后考虑每一条边,每一条边的贡献就是使两个点中的一个度数加1,那么对于答案贡献就是减少原有度数个三元环。这看上去就像是一个匹配问题,并且有费用,所以我们需要利用费用流。但是现在的问题就是每一次减少的个数会发生改变,也就是说流到一个点的费用和次数有关,所以我们不能直接建一条边处理了。由于每一次流的费用是递增的,所以我们可以建n条边流量原创 2021-01-22 19:46:38 · 85 阅读 · 0 评论 -
P2304 [NOI2015] 小园丁与老司机(网络流/上下界网络流)
P2304 [NOI2015] 小园丁与老司机平面上有n个点,每次可以向左、右、上、左上45度、右上45度移动,然后直线移动到达第一个没有到过的点,如果没有这样的点就不能移动,求解一条最长路,然后求解将所有可能不是左右移动的道路都覆盖需要多少路径。那么首先最长路可以利用dp求解,然后需要覆盖可以先将这样的道路找到,然后连接一条边,利用上下界网络流求解最小流即可。...原创 2021-01-21 23:40:46 · 116 阅读 · 0 评论 -
P3511 [POI2010]MOS-Bridges(网络流/欧拉回路)
P3511 [POI2010]MOS-Bridges给出一个图,边正着走和反着走的边权不同,求解最大边权最小的欧拉回路,输出方案。首先看到最大边权最小我们就可以想到二分答案,然后现在在剩余的图上我们要判断是否存在欧拉回路,我们可以考虑用类似于上下界网络流的思路求解,因为欧拉回路恰好就满足入度等于出度,那么就是网络流流量守恒的性质,所以我们先将所有确定方向的边加入,然后对于没有确定方向的边任意选择一个方向加入,然后连一条反悔边,这样我们只需要将源点连向流量多的,然后流量少的连向汇点,这样跑最大流检验即可。原创 2021-01-21 23:03:50 · 132 阅读 · 0 评论 -
P2494 [SDOI2011]保密(网络流/最小割/01分数规划)
P2494 [SDOI2011]保密这道题是一个很综合的题目首先有一个二分图,到达一个点就可以到达所有该点相连的边,然后需要覆盖所有边,然后给定一张图你从起点出发然后可以到达二分图的节点,保证没有环,每条边有时间和花费,然后可以派出队伍走,代价就是行走的路径时间比花费,求解最小代价。首先这个二分图最小边覆盖,如果没有对应花费的话就是最大匹配,但是现在每个点有了对应花费,这就是另一个经典模型了,我们每一条边要么需要左边点被选,要么需要右边点被选,所以这种多选一问题就是一个最小割模型了,然后我们就可以首先原创 2021-01-21 22:29:08 · 103 阅读 · 0 评论 -
P3357 最长k可重线段集问题(网络流/串联/拆点)
P3357 最长k可重线段集问题对于n条开线段,选择一个子集使得任意x=p和子集相交的直线个数小于等于k,并使得选择的线段长度之和最大。这道题看上去和区间集没有什么区别,只是费用发生变化,但是要注意一个特殊情况,那就是线段和x轴垂直的情况,这个时候如果还是按照之前的方法连边,那么就会出现自环,那么在这个点就可以流无限次,就无法满足k的限制,所以我们要将这样的点进行拆点,然后就可以满足限制了。...原创 2021-01-21 21:19:05 · 84 阅读 · 0 评论 -
P3358 最长k可重区间集问题(网络流:串联思想)
P3358 最长k可重区间集问题这是一个经典模型,给定n个开区间,选择一些区间使得每个位置被覆盖次数不超过k,并最大化选择的区间长度之和。首先一个直接的想法就是每一个区间匹配了它所对应的点,但是我们要求选择一个区间就必须要全部流过,这个限制不好处理,这种一流对多流的问题我们有一个思路就是利用串联,这样能够使得整个区间都受到影响。那么具体建图就是将图建成一个链,然后每次一个区间就连接对应端点,流量为1费用为长度,然后从源点到1号点的流量限制为k,这样就限制了一个点只会有k个区间覆盖。...原创 2021-01-21 21:14:54 · 137 阅读 · 0 评论 -
P3356 火星探险问题(网络流)
P3356 火星探险问题对于一个第一次经过会有价值,但是之后经过没有价值的点,我们的处理方法就是只连一条流量为1并且有费用的边,再连接流量为INF但是没有费用的边,这样我们要使得价值最大就会优先流有费用的边。...原创 2021-01-19 21:26:37 · 119 阅读 · 0 评论 -
P3355 骑士共存问题(网络流)
P3355 骑士共存问题经典的最大独立集问题,详细证明原创 2021-01-21 20:40:44 · 72 阅读 · 0 评论 -
P2770 航空路线问题(网络流)
P2770 航空路线问题似乎是一个经典的双调路径问题,然后这里使用网络流解决了,本质上要求两条路径没有经过同一个点,并且总长度最大,所以我们实际上可以跑网络流,然后拆点限制路径没有交点。...原创 2021-01-19 10:45:22 · 70 阅读 · 0 评论 -
P2766 最长不下降子序列问题(网络流)
P2766 最长不下降子序列问题求解LIS长度k求解长度为k的不下降子序列个数,并且一个数只能使用一次求解长度为k的不下降子序列个数,第一个数和第n个数可以使用任意次首先利用dp可以求解出以每个点开始的最长不下降子序列,然后可以类似于最短路图,我们也可以建出一个状态转移图,然后现在上面每一条从起点到终点的路径都代表了一个最优转移,那么我们只需要拆点然后跑最大流即可,第三问可以类似处理将第一个数和第n个数的限制去掉。另外我们可以类似地处理一个问题,就是最少去掉几个点能够使得LIS的数量变化,那么原创 2021-01-19 10:20:01 · 116 阅读 · 0 评论 -
P2765 魔术球问题(网络流)
P2765 魔术球问题给出n根柱子,求解可以将最多多少编号的球放在上面,并且满足相邻的编号和为完全平方数。n<=50这个数据范围我们可以选择网络流,然后将对应点连边,然后每次枚举编号,将其加入残量网络,接着跑最大流。因为这道题本质上利用的还是二分图最小链覆盖等于点数减去最大匹配数,现在等于是链数一定,要让点数尽量大,所以我们可以直接枚举。对于输出方案数,我们只需要输出流满的边即可。...原创 2021-01-18 21:36:51 · 100 阅读 · 0 评论 -
P2764 最小路径覆盖问题(网络流)
P2764 最小路径覆盖问题最小链覆盖问题,关键在于怎么转化为网络流问题,我们可以发现网络流的常见套路就是将一个点拆成出点和入点来处理,对于一条链恰好满足出点和入点匹配的性质,所以可以拆点然后对应连边,这样跑最大流得到的就是链的最大长度,容易求出链的个数。拆成入点和出点匹配...原创 2021-01-18 21:21:08 · 141 阅读 · 0 评论 -
P2761 软件补丁问题(状态压缩/最短路)
P2761 软件补丁问题原创 2021-01-18 21:07:07 · 51 阅读 · 0 评论 -
P2754 [CTSC1999]家园 / 星际转移问题(网络流)
P2754 [CTSC1999]家园 / 星际转移问题经典问题,利用分层图来跑网络流。原创 2021-01-18 20:59:19 · 63 阅读 · 0 评论 -
Tarjan缩点/边双/点双
文章目录代码实现实际应用1.有向图另外:对于缩点之后的DAG的处理2.无向图求法细节细节:目录:1.「POJ 3694」Network2.「2019 ICPC 横滨站」3. P3225 [HNOI2012]矿场搭建4. 一本通 分离的路径代码实现所以其实就三个玩意1.dfn[],low[],indx2.stack<int>s,bool pd[]3.scc[],scnt,col[]等我们要求的信息 变量名 用处dfn 记录当前已经访问了几个节点scc原创 2021-01-25 22:27:17 · 539 阅读 · 0 评论