图论
文章平均质量分 61
基础图论
SHOHOKUKU
这个作者很懒,什么都没留下…
展开
-
Codeforces 1955H 最小费用流 / DP
新增源点、汇点,将带权二分图建模为网络流,构造势函数保证边权非负,使用dijkstra算法不断增广。而此处的图具备良好的性质,即每次增广所用的边数。那么对于流量任意的最小费用流,只需在残余网络存在权值为负的路径情况下不断增广。为左右节点构造带权二分图,问题转化为求匹配数任意情况下的最小权匹配。,则塔对敌人造成的伤害与初始化增加的生命值两者的总贡献为正,此时显然取。都是相等的(不妨假设增广路中每条反向边可以抵消一条原边),即。不同塔对敌人的贡献是独立的。的攻击范围,则其对敌人的造成伤害的上界为。原创 2024-05-02 11:06:22 · 709 阅读 · 0 评论 -
LeeCode 1728 任意图上博弈
具体而言,将博弈双方位置加之先后手状态看作任意图上的一个节点。对于可以确定胜负态的节点,以其为起点,使用类似拓扑序更新的操作不断递推其余节点的状态。的方格,任意图博弈求解时间复杂度为。任意图上博弈,可参考。原创 2024-04-30 22:38:55 · 246 阅读 · 0 评论 -
AtCoder ABC239G 最小割集
对于最小割集的求解,求解最大流后,从源点出发在残余网络中 DFS,对所有可达的点打上标记,最终满足。此时答案为新图的最小割。未被标记的节点则属于最小割集。将原图中每个节点拆为入点。的边,对于原图每一个点,原创 2023-10-14 22:41:45 · 322 阅读 · 0 评论 -
Codeforces 1878G 枚举 + 树上倍增
答案依赖于查询的路径上的所有点。按位与具备单调性,可以仅枚举路径上各个数位上的。预处理出树上倍增的信息,枚举中间位置更新答案。考虑答案的最大性,容易观察到,仅枚举。出现的深度最大的节点,此时可以处理出。第一次出现的位置,这样的位置规模为。自顶而下维护各个数位上。原创 2023-10-07 17:00:49 · 125 阅读 · 0 评论 -
AtCoder ARC106 E Hall 定理 + 二分 + 容斥原理 + 高维前后缀和
因为每一个职工的休息日之前总是对应唯一的工作日。预处理出每一天可以选择的用户集合。二分确定工作时长之后,可以统计出对于每一个确定的用户集合。的并集的规模,使用容斥原理,求高维前缀和即可。但二分图规模过大,直接求解最大匹配显然难以胜任。问题可以转化为每一天与职员之间的匹配问题,思路与。,与其存在连边的二分图另一侧节点的数量要大于等于。根据 Hall 定理,若二分图一侧点集。都能被匹配的充要条件是,对于。被选择的日子的集合。做高维后缀和,就能求出。的交集的规模,为了求出。,其恰好能被选择的天数。原创 2023-09-19 11:41:23 · 217 阅读 · 0 评论 -
AtCoder ABC320 G 二分 + 二分图匹配
答案满足单调性,二分求解。将问题转化为字符串与时间点的匹配问题,单个字符串代表的节点至多向。,仅从字符串节点一侧寻找增广路,匈牙利算法可以做到。段时间至少能匹配一个字符串,故二分上界为。字符串代表的二分图的一侧节点个数为。个时间点连边即可,因为剩余。原创 2023-09-19 11:23:43 · 224 阅读 · 0 评论 -
Codeforces 1625E2 括号树 + BIT
首先利用栈将原始字符串转换为合法的 RBS,不能匹配的括号设为 ‘.’。根据匹配的括号序列构造树,具体而言,遇到左括号,则新建节点向下递归,遇到右括号则回溯。则对于括号树上某一结点。操作 1 仅删除叶子节点与其双亲节点的连边,那么使用 BIT 维护节点的贡献和,以及每个节点的子树数量即可。对于某棵子树的答案,为子树的贡献,加上。为子树的数量,后一项贡献代表了连续的。,其代表的合法括号序列。原创 2023-08-30 23:08:05 · 323 阅读 · 0 评论 -
Codeforces 1754F Dijkstra
观察到一张浴床至多移动一次,否则可以构造出花费更小的方案。将浴床的移动,看作将一个空位 ‘.’ 移动到了之前浴床的某一半所占据的格子上。方案的构造可能涉及多个浴床的移动。考虑建图,求解从所有空位 ‘.’ 出发,经过不断地移动抵达某个位置的花费。对于图中相邻格子,两者横纵坐标求和的奇偶性不同。位于某一个位置的空位 ‘.’ 只能移动到与其奇偶性相同的位置上。那么枚举相邻格子,答案为空位 ‘.’ 抵达两者的花费之和。原创 2023-06-13 15:20:54 · 1731 阅读 · 0 评论 -
Codeforces 429E 2-SAT
先贴一个最开始写的,后来觉得有误的方法:欧拉回路。对于这类黑白染色,且存在差值绝对值不超过 1 的问题,可以考虑欧拉回路求解。因为按照欧拉回路将无向图的边指定方向后,任意点的入度与出度相等;若图中存在度数为奇的点,这样的点只有偶数个,那么将其两两一组进行连边,求解欧拉回路后删边,此时,任意点的入度与出度差值的绝对值不超过 1。.........原创 2022-07-16 11:39:36 · 184 阅读 · 0 评论 -
P4043 [AHOI2014/JSOI2014] 上下界最小费用流
游戏剧情构成一个 DAG,一次游戏花费的时间等于所走剧情路线花费的时间和。那么问题转化为边容量有上下界限制的最小费用流问题。设置超级汇点,与所有剧情点连边后,跑有源汇上下界最小费用流即可(基本思路是假设下界限制得到满足,然后尽量使流量平衡)。.........原创 2022-07-08 21:57:47 · 641 阅读 · 0 评论 -
Codeforces 1444C 可撤销并查集
题意传送门 Codeforces 1444C Team-Building题解图中节点划分为不相交的点集 SSS,求满足所构成子图为二分图的点集对 (S1,S2)(S_1,S_2)(S1,S2) 数量。若点集 SSS 构成的子图存在奇环,则它与任意其他点集构成的子图都不可能是二分图。讨论满足二分图判定的点集即可。若两点间存在一条边,则两点划分至不同的集合,可以通过并查集维护这样的关系。依次考虑点集 SSS,处理与它存在连边的点集 TTT,判断 S,TS,TS,T 构成的子图是否为二分图即可。可以原创 2022-04-26 22:50:14 · 633 阅读 · 0 评论 -
Codeforces 1525F 二分图最小点覆盖 + DP
题意传送门 Codeforces 1525F Goblins And Gnomes题解若 DAG 的最小路径覆盖数小于等于哥布林数,则必败。DAG 的最小路径覆盖是一个经典问题,可以转换为求解拆点二分图的最大匹配。只删除图中某个节点的出边或入边等价于删除二分图上的某个节点,最大化收益则需要删除的点数尽可能小,那删除二分图最大匹配的必经点可以满足要求。二分图的最小点覆盖等于最大匹配。以任意次序删除二分图的最小点覆盖可以发现,最大匹配数依次减少一。那么问题中删除的点集就是最小点覆盖的某个子集。二分图最原创 2022-04-24 11:13:09 · 1011 阅读 · 0 评论 -
Codeforces gym103119C 最小异或生成树
题意传送门 Codeforces gym103119C题解将边权按照权值从小到大依次考虑,尽量使边的端点划分至不同的集合,类似于并查集处理分类问题的过程,当第一次出现无法将端点划分至不同集合时,当前边权即答案。这样处理 O(n2logn)O(n ^ 2\log n)O(n2logn)。将 (u,v)(u, v)(u,v) 划分为两个集合,则连边 (u,v)(u, v)(u,v),此时最小生成树上二分图染色得到的两个集合即是目标集合。最小异或生成树可以通过按照数位从高到低分治求解,总时间复杂度 O(原创 2022-04-13 11:41:19 · 929 阅读 · 0 评论 -
P1399 [NOI2013] 树的直径 + 枚举
题意传送门 P1399 [NOI2013] 快餐店题解图是一棵基环树。选择的位置一定是删除环上某条边后,树的直径的中点。将环在任意位置断开,依次考虑删边,此时树的直径有三种可能:位于前缀;位于后缀;同时包含前后缀。总时间复杂度 O(n)O(n)O(n)。#include <bits/stdc++.h>using namespace std;using ll = long long;constexpr int MAXN = 1E5 + 5;constexpr ll INF =原创 2022-04-11 17:15:31 · 221 阅读 · 0 评论 -
计蒜客 A1611 最小割
题意传送门 计蒜客 A1611 Naomi with Graph题解对于 nnn 较小的情况,可以考虑状压 DP,按路径长度递增依次枚举节点,对于本题则难以胜任。添加任意边后路径长存在几个约束。首先,任意节点到起点的最短路 dist′[v]≤dist[v]dist^\prime [v]\leq dist[v]dist′[v]≤dist[v];其次,若存在边 (u,v)(u,v)(u,v),则 ∣dist[u]−dist[v]∣≤1\lvert dist[u] - dist[v]\rvert\leq原创 2022-04-04 22:07:54 · 605 阅读 · 0 评论 -
UVa10779 最大流
题意传送门 UVa 10779 Collectors Problem 题解除源汇点外,对于人与物品分别建立 n,mn,mn,m 个节点。C[i][j]C[i][j]C[i][j] 代表人 iii 持有物品 jjj 的数量。Bob 若持有物品 jjj,则 s→js\rightarrow js→j 连一条容量为 C[0][j]C[0][j]C[0][j] 的边;所有种类物品向 ttt 连一条容量为 111 的边。除了 Bob 以外的人 iii,若 C[i][j]=0C[i][j]=0C[i][j]=0,则原创 2022-04-02 21:09:40 · 409 阅读 · 0 评论 -
计蒜客 A1617 Hall 定理 + 尺取法 + 线段树
题意传送门 计蒜客 A1617 LOVER II题解先不考虑区间查询。对于 bbb 与 aaa,令其升序排序。令 c[i]c[i]c[i] 等于满足 a[i]+b[j]≥ka[i] + b[j] \geq ka[i]+b[j]≥k 的 jjj 的数量。c[i]c[i]c[i] 单调不减,且满足条件的 jjj 是 aaa 的后缀。满足条件当且仅当 c[i]≥ic[i]\geq ic[i]≥i。可以通过 Hall 定理证明,满足上述条件时存在 aaa 的完备匹配。对于 bbb,若 lll 增加,满足条件原创 2022-04-02 16:58:12 · 1118 阅读 · 0 评论 -
Codeforces 1373G Hall 定理 + 线段树
题意传送门 Codeforces 1373G Pawns题解棋子 (x,y)(x,y)(x,y) 能安排在 y≤∣k−y∣+xy\leq \lvert k-y\rvert + xy≤∣k−y∣+x 的位置。令 f(j)f(j)f(j) 代表 i≥ji\geq ji≥j 必须安排的棋子数量,那么对于合法的最大行号 ttt,应该满足 f(j)≤t−j+1f(j)\leq t - j + 1f(j)≤t−j+1。根据 Hall 定理,将 f(j)f(j)f(j) 看作二分图需要构造完备匹配的一侧点集(显然原创 2022-04-01 22:58:06 · 456 阅读 · 0 评论 -
Codeforces 338E 线段树
题意传送门 Codeforces 338E Optimize!题解对于每一个 j(1≤j≤n−len+1)j(1\leq j\leq n-len+1)j(1≤j≤n−len+1),求是否存在一个次序使 a[j+i]=b[i],1≤i≤lena[j+i] = b[i],1\leq i\leq lena[j+i]=b[i],1≤i≤len。对于 lenlenlen 长的 bbb 与 aaa 的子数组,令其升序排序。令 c[i]c[i]c[i] 等于满足 b[i]+a[j]≥hb[i] + a[j] \g原创 2022-04-01 18:02:29 · 508 阅读 · 0 评论 -
SGU 286 Hall 定理 + 欧拉回路 + 二分图最大匹配
题意传送门 SGU 286 Ancient decoration题解所有节点度数都为偶数,则任一个连通分量都存在欧拉回路。求欧拉回路,使无向边确定一个方向。此时任意节点出度入度均为 k/2k/2k/2。原图中每个节点拆为出点 vvv 与入点 v′v^\primev′,得到一个二分图。对于每一条有向边 u→vu\rightarrow vu→v,在新图中建为 u→v′u\rightarrow v^\primeu→v′。此时保证每条边仅使用一次。对于出点构成的任意点集 SSS 的出度,一定不大于与其连边的原创 2022-04-01 11:26:11 · 936 阅读 · 0 评论 -
P3292 [SCOI2016] 贪心 + 线性基 + LCA
题意传送门 P3292 [SCOI2016]幸运数字题解求树上两点间路径任意数字的异或最大值。求出线性基即可。不妨设 O(logG)O(\log G)O(logG) 与 O(logn)O(\log n)O(logn) 同一量级。考虑倍增,由于涉及两段路径的线性基合并,预处理 O(nlog3n)O(n\log^3n)O(nlog3n),查询 O(qlog3n)O(q\log^3 n)O(qlog3n)。显然难以胜任。考虑点分治,维护任一节点到重心路径上的线性基,此时只用考虑单个节点点值的插入原创 2022-03-24 21:31:55 · 620 阅读 · 0 评论 -
P4313 最小割
题意传送门 P4313 文理分科题解用最小的费用将对象划分为两个集合的问题,常常可以转换成最小割后顺利解决。记图的 s−ts-ts−t 割中,包含源点 sss 的集合为 SSS, 包含汇点 ttt 的集合为 TTT。假设被 SSS 包含的节点选择文科,反之选择理科。将问题从求解最大值转换为求解最小值∑i,j(arti,j+sciencei,j+same_arti,j+same_sciencei,j)−(∑(i,j)∈Tarti,j+∑(i,j)∈Ssciencei,j+∑(i,j)与相邻格子至原创 2022-03-24 12:37:02 · 537 阅读 · 0 评论 -
P3749 [六省联考 2017] Dinic
题意传送门 P3749 [六省联考 2017] 寿司餐厅题解ccc 种代号为 xxx 的寿司,则她需要为这些寿司付出 mx2+cxmx^2 + cxmx2+cx 元钱,后一项可以合并进 di,id_{i,i}di,i,如果没有前一项,可以考虑枚举选择的不相邻的连续区间进行 DPDPDP,但考虑 m≠0m\neq 0m=0 时,需要维护是否使用某一种代号的状态,状态数达到 O(2n)O(2^n)O(2n),显然难以胜任。若区间 [l,r][l,r][l,r] 被选择,则被它包含的规模更小的子区间原创 2022-03-22 21:22:46 · 313 阅读 · 0 评论 -
P2805 [NOI2009] 拓扑序 + Dinic
题意传送门 P2805 [NOI2009] 植物大战僵尸题解僵尸要抵达某一个位置 (i,j)(i,j)(i,j),需保证已走过其右侧位置(如果存在)以及使 (i,j)(i,j)(i,j) 成为攻击点的位置 (i′,j′)(i^\prime,j^\prime)(i′,j′)。那么 (i′,j′)→(i,j)(i^\prime,j^\prime) \rightarrow (i,j)(i′,j′)→(i,j) 建边,求拓扑序,那么未进队的点都是不可达节点。那么问题转化为将可达节点划分为两类,一类被攻击,一原创 2022-03-22 19:59:56 · 276 阅读 · 0 评论 -
P2766 Dinic
题意传送门 P2766 最长不下降子序列问题题解最长不下降子序列的长度 DP 求解即可。dpidp_idpi 代表 iii 为初始元素的最长不下降子序列长度。dpi=maxi<j,xi≤xj{dpj}+1dp_i = \max_{i<j,x_i\leq x_j} \{dp_j\}+1dpi=maxi<j,xi≤xj{dpj}+1。对于第二问,由于子序列长度 lenlenlen 是可达的最大长度,那么子序列第 kkk 个元素只可能是 dpi=len−k+1dp_i=le原创 2022-03-22 16:34:17 · 288 阅读 · 0 评论 -
P2765 Dinic
题意传送门 P2765 魔术球问题题解将满足 x+yx+yx+y 为完全平方数的数字 x,yx,yx,y 连边,考虑到从小到大依次放入数字,那么建一条有向边 min(x,y)→max(x,y)\min(x,y)\rightarrow \max(x,y)min(x,y)→max(x,y)。于是得到一个 DAGDAGDAG。若数字 1⋯num1\cdots num1⋯num 可以放到 nnn 个柱子上,则等价于 DAGDAGDAG 可以找到一组规模为 nnn 的最小路径覆盖的路径数。那么依次增大 n原创 2022-03-21 20:55:31 · 761 阅读 · 0 评论 -
P2754 [CTSC1999] 枚举 + Dinic
题意传送门 P2754 [CTSC1999]家园 / 星际转移问题题解若月球可达,则总时间一个宽松的上界是 O(n2k)O(n^2k)O(n2k)。二分然后跑最大流,存在重复建图的操作。那么并查集判连通性后,递增枚举时间,在残余网络求增广路即可。#include <bits/stdc++.h>using namespace std;typedef long long ll;#define pb push_backconst int MAXM = 22, MAXV = 2e5, I原创 2022-03-21 17:58:12 · 302 阅读 · 0 评论 -
P2065 [TJOI2011] 线性筛 + Dinic
题解传送门 P2065 [TJOI2011]卡片题解若两张卡片能够组成一组,则连一条边,问题转化为求图中的最大二分匹配。直接建图,边数为 O(nm)O(nm)O(nm),应用 Dinic 算法也难以胜任。考虑优化建图,任一个数字 aaa 只有 O(loga)O(\log a)O(loga) 种质因子,将出现的质因子建为虚节点,那么二分图左右部节点通过虚节点连接,此时点、边数都为 O(nlogn+mlogm)O(n\log n+m\log m)O(nlogn+mlogm)。跑 Dinic 即可。原创 2022-03-19 17:31:29 · 143 阅读 · 0 评论 -
P4617 [COCI2017-2018#5] Dinic + SCC 分解 / 匈牙利算法
题意传送门 P4617 [COCI2017-2018#5] Planinarenje题解二分图博弈问题。构造一组二分图最大匹配。博弈过程可以看作走交错路的过程。若先手从左部走一条非匹配边,由于图中不存在增广路,故最终停在左部点上,先手必败。若先手走一条匹配边,若最终停在左部点上,那么将交错路匹配状态取反,将得到另一组最大匹配;反之,出发点是最大匹配的必经点。问题转化为判断图的各个左部点是否是二分图最大匹配的必经点。Dinic + SCC 分解DinicDinicDinic 求解最大匹配。在残余网原创 2022-03-19 12:02:23 · 1111 阅读 · 0 评论 -
P3731 [HAOI2017] Dinic + SCC 分解
题意传送门 P3731 [HAOI2017]新型城市化题解nnn 座城市可以恰好被划分为不超过两个城市群,那么补图,即没有建立贸易伙伴关系的城市队应的图是一个二分图。求补图中删除任一条边后最大城市群的大小至少相差 111,需要注意的是,最大城市群不一定代表左部节点/右部节点,而是指补图中的最大独立集。二分图中最大独立集规模等于节点数减去最小点覆盖,而后者等于二分图最大匹配。那么问题转化为求解二分图最大匹配的必经边。DinicDinicDinic 求解最大匹配。在残余网络中,若匹配 (u,v)(u,v原创 2022-03-18 21:55:11 · 335 阅读 · 0 评论 -
P2423 [HEOI2012] 枚举 + 二分图
题意传送门 P2423 [HEOI2012]朋友圈题解A 国是一个二分图,左右部节点奇偶性不同,则在图的最大团中,左部、右部各至多包含一个节点。B 国的补图是一个二分图,左右部节点奇偶性不同。原图的最大团等于补图的最大独立集,最大独立集等于图中节点数减去最小点覆盖。二分图中最小点覆盖等于最大二分匹配,那么求最大团的问题最终转化为求二分图的最大匹配。枚举 A 国在最大团中的点集 SSS,其规模最多为 222,仅考虑与 SSS 所有点都连边的 BBB 国中的节点,求最大团即可。总时间复杂度 O(A2原创 2022-03-17 16:54:17 · 477 阅读 · 0 评论 -
P6577 KM
题意传送门 P6577 【模板】二分图最大权完美匹配题解KM 算法裸题。BFS 求增广路,总时间复杂度 O(n3)O(n^3)O(n3)。#include <bits/stdc++.h>using namespace std;#define pb push_backtypedef long long ll;const int MAXN = 505;const ll INF = 0x3f3f3f3f3f3f3f3f;int N, M;int lmatch[MAXN], rma原创 2022-03-17 14:58:24 · 447 阅读 · 0 评论 -
P3588 [POI2015] 线段树优化建图 + 差分约束系统
题意传送门 P3588 [POI2015] PUS题解若 ai>aja_i>a_jai>aj,则有 ai−1≥aja_i-1\geq a_jai−1≥aj,转化为差分约束系统。对于这样的关系,从 aia_iai 向 aja_jaj 连一条权值为 −1-1−1 的边。对于已知值的情况,最坏情况下连边数为 O(n2)O(n^2)O(n2),可以通过建立虚节点进行优化。具体而言,对于 (u,v,−1)(u,v,-1)(u,v,−1) 对应的边,建立虚节点 ppp,连边变为 (u原创 2022-03-15 22:34:05 · 275 阅读 · 0 评论 -
P5025 [SNOI2017] 线段树优化建图 + SCC 分解 + 拓扑序
题意传送门 P5025 [SNOI2017]炸弹题解若炸弹 vvv 可以引爆 uuu,则 v→uv\rightarrow uv→u 连一条边。炸弹 vvv 可引爆的炸弹数为 vvv 可达的节点数,这可以通过分解强连通分量后,进行拓扑序递推得到。难以直接求解任意拓扑序上节点的可达节点数 ,但此处节点可达集合满足连续性,那么维护可达的左右界集即可。上述做法时空复杂度均为 O(n2)O(n^2)O(n2)。考虑线段树优化建图,那么 v→[l,r]v\rightarrow[l,r]v→[l,r] 连边数为原创 2022-03-15 17:38:59 · 864 阅读 · 0 评论 -
Codeforces 786B 线段树优化建图 + Dijkstra
题意传送门 Codeforces 786B Legacy题解建两颗线段树 otr,itrotr,itrotr,itr,分别代表出点与入点。首先,对于 [0,n)[0,n)[0,n) 各点,从其入点向出点连一条边权为 000 的边。接着 otrotrotr 上子节点向父节点连一条边权为 000 的边, itritritr 上父节点向子节点连一条边权为 000 的边。对于各个操作,以 v→[l,r]v\rightarrow [l,r]v→[l,r] 为例,从 vvv 在 otrotrotr 上的编号,向原创 2022-03-15 17:30:50 · 342 阅读 · 0 评论 -
P2515 [HAOI2010] SCC 分解 + 树形 DP
题意传送门 P2515 [HAOI2010]软件安装题解对于每个依赖,从 D[i]D[i]D[i] 向 iii 连一条边,每个节点至多存在一条入边,则得到的有向图实际上是一个外向树(基环树的一类)森林。分解强连通分量,缩点得到森林,添加超级源点,问题转化为有树形依赖的背包问题,树形 DP 即可。总时间复杂度 O(nm2)O(nm^2)O(nm2)。#include <bits/stdc++.h>using namespace std;#define pb push_backcon原创 2022-03-08 10:43:08 · 150 阅读 · 0 评论 -
P5058 [ZJOI2004] v-DCC
题意传送门 P5058 [ZJOI2004]嗅探器题解若两个信息中心位于不同的联通分量,则无解;反之,答案为信心中心间编号最小的割点。求点双连通分量,缩点后得到一棵树,用信息中心间的路径上的割点更新答案即可。#include <bits/stdc++.h>using namespace std;#define pb push_backconst int MAXN = 2e5 + 5;int N, idx[MAXN];vector<int> G[MAXN], nG[M原创 2022-03-04 21:44:35 · 382 阅读 · 0 评论 -
P2272 [ZJOI2007] SCC 分解 + DP
题意传送门 P2272 [ZJOI2007]最大半连通子图题解分解强连通分量后缩点得到 DAG。位于同一个 SCC 中的任意两点显然满足它们之间至少存在一条路径。任意一个 SCC 中的点 uuu 与其可达的 SCC 中的点 vvv,显然也满足条件。问题转化为求 DAG 中点权最大的路径,拓扑序 DP 求解即可。总时间复杂度 O(n+m)O(n+m)O(n+m)。#include <bits/stdc++.h>using namespace std;#define pb push_ba原创 2022-03-04 12:58:06 · 149 阅读 · 0 评论 -
P1407 [国家集训队] 二分图匹配
题意传送门 P1407 [国家集训队]稳定婚姻题解求原图中的各条匹配边是否是最大匹配的必经边。那么枚举匹配边 (u,v)(u,v)(u,v),将其删除后(匈牙利算法中匹配边可以通过点的匹配信息找到,故匹配边可以不用显式地添加到图中,此时也避免了删边操作),设 u,vu,vu,v 为未匹配状态,若从 uuu 出发能找到一条增广路,则这条匹配边不是最大匹配的必经边,将其删除后仍能找到图中一组完备匹配。总时间复杂度 O(nm)O(nm)O(nm)。#include <bits/stdc++.h&g原创 2022-03-04 11:32:07 · 229 阅读 · 0 评论 -
SGU 219 SCC + 拓扑序
题意传送门 SGU 219 Synchrograph题解将图分解强连通分量,考虑任一个 SCC。若图中存在边权为零的环,由于 SCC 中任意两点间存在回路,则可以构造出一个操作序列使边权集中在指向边权为零的环的边上,此时全部 SCC 中的点不满足 alive 的条件;若 SCC 中不存在零环,则对于一个环,无论如何操作,其边权总和不变,那么任意 SCC 中的点都满足条件。将图中转移边权的操作看作流量,则 SCC 缩点得到的 DAG 中,入度为零的且不存在零环的 SCC 可以无限地向出边输出流量,不断原创 2022-03-03 17:22:21 · 389 阅读 · 0 评论