图论
文章平均质量分 82
OI 中图论有关题目
Plozia
这个作者很懒,什么都没留下…
展开
-
P5227 [AHOI2013]连通图 题解
线段树分治套路好题。原创 2022-03-30 21:36:53 · 763 阅读 · 0 评论 -
数据结构专题 - 学习笔记:线段树分治
线段树分治的学习笔记。原创 2022-03-30 16:56:01 · 1617 阅读 · 0 评论 -
图论专题-学习笔记:Prufer 序列
Prufer 序列学习笔记。原创 2022-02-13 19:28:53 · 509 阅读 · 0 评论 -
P3320 [SDOI2015]寻宝游戏 题解
一道虚树题,但严格意义上跟虚树没啥关系,实际上更像思维题原创 2021-12-16 21:41:58 · 2058 阅读 · 0 评论 -
图论专题-学习笔记:树上差分
图论专题-学习笔记:树上差分1. 前言2. 详解2.1 点上差分2.2 边上差分2.3 例题3. 总结1. 前言树上差分,是一种难度不高,思维量也不大的算法,应用范围比较窄但是快。前置知识:差分,树上最近公共祖先(LCA)。2. 详解2.1 点上差分先来看这么一个例题:给出一棵 nnn 个点的树,每个点点权初始为 0,现在有 mmm 次修改,每次修改给出 x,yx,yx,y,将 x,yx,yx,y 简单路径上的所有点点权 +d+d+d,问修改完之后每个点的点权。1≤x,y≤n≤106,m≤1原创 2021-09-07 21:13:23 · 576 阅读 · 0 评论 -
图论专题-学习笔记:2 - SAT 问题
图论专题-学习笔记:2 - SAT 问题1. 前言2. 详解3. 总结1. 前言本篇文章将会对 2 - SAT 问题做一个讲解。前置知识:强连通分量/缩点(我的博客链接/强连通分量 - OI Wiki)。2. 详解首先我们需要知道 2 - SAT 是什么。实际上 2 - SAT 是 k - SAT 的一种特殊情况。k - SAT 问题的一般描述就是有一些物品,每个物品均有 kkk 个状态,给出一些限制条件,诸如 A 为 a 状态则 B 为 b 状态之类的,问有无可行解,有时还会让你求解。目前原创 2021-08-12 21:04:55 · 905 阅读 · 0 评论 -
P2515 [HAOI2010]软件安装 题解
首先看到这道题,每个软件有体积有价值,加上其有依赖关系,就能够想到这是道树上背包问题。树上背包问题的方程就不再赘述了,不会的读者可以自行百度,这类经典问题网上讲解的还是挺多的。如果软件 xxx 依赖 yyy,那么就连边 y→xy \to xy→x。然后你高高兴兴的打出了树上背包问题的代码,结果……10pts。问题在于这道题有 nnn 条边不是 n−1n-1n−1 条,因此可能会存在环。比如说下面这张图:如图,当 3 个软件互相依赖的时候就会形成环,只能要么都选要么都不选。那么对于这种环我们可原创 2021-07-18 18:29:25 · 121 阅读 · 0 评论 -
CF845G Shortest Path Problem? 题解
首先看到题目的时候,看见异或最小值,就需要想到可能是线性基,而这题正需要线性基。这里推几个线性基的写的好的文章:线性基 - OI Wiki数学/数论专题-学习笔记:线性基 - By Plozia好,现在我认为你已经掌握了线性基。对于 1→n1 \to n1→n 的路径而言,我们可以将这条路径拆成 2 部分:一条链 + 一些环。相当于我们要求链的路径长度异或上所有环长度的最小值。先看所有环长度的异或最小值,我们可以先用一遍 DFS 预处理出所有的环,将这些环的长度丢到线性基里面,那么这样线性原创 2021-07-15 18:36:12 · 117 阅读 · 0 评论 -
CF1294F Three Paths on a Tree 题解
这是一道思维题。本文约定:u→vu \to vu→v 表示从 uuu 到 vvv 的路径。首先简化一下题意:给出一棵树,求出三个点使得三个点之间两两路径并的长度最大。显然我们不能枚举这三个点,复杂度 O(n3)O(n^3)O(n3) 过大,不能接受。做这道题需要一个重要结论:树的直径的两个端点一定是要被选中的。简单证明:假设树的直径的两个端点是 u1,v1u_1,v_1u1,v1,选的是 u,v,wu,v,wu,v,w 三个点,u→vu \to vu→v 并不是树的直径。设 u→vu \原创 2021-06-30 20:31:09 · 208 阅读 · 0 评论 -
图论专题-专项训练:点分治
图论专题-专项训练:点分治1. 前言2. 练习题[P4178 Tree](https://www.luogu.com.cn/problem/P4178)[P2634 [国家集训队]聪聪可可](https://www.luogu.com.cn/problem/P2634)[P4149 [IOI2011]Race](https://www.luogu.com.cn/problem/P4149)3. 总结1. 前言本篇博文是作者在学习点分治这一算法的时候做的一些题目的总结。前置知识:点分治算法。图论专题原创 2021-06-21 19:59:45 · 157 阅读 · 0 评论 -
图论专题-学习笔记:点分治
图论专题-学习笔记:点分治1. 前言2. 详解2.1 树的重心2.2 点分治3. 总结1. 前言点分治,是一种图论算法,专门用于一类树上路径统计问题。前置知识:无。2. 详解2.1 树的重心讲点分治之前我们先来讲讲树的重心。树的重心的定义是这样的:在一棵树中,如果以一个点为根,其所有儿子的子树大小最大值是最小的,那么这个点就是树的重心。换言之,树的重心需要满足其子树的最大值最小。比如下面这棵树,1 号点就是树的重心。树的重心有一个很重要的性质:其最大子树大小小于等于 n2\dfrac{原创 2021-06-17 18:38:18 · 198 阅读 · 2 评论 -
P2805 [NOI2009] 植物大战僵尸 题解
这道题是一道好题目,考察了建模能力。但是因为数据过水导致建模建错都能有 80 分首先我们需要了解一个概念:最大权闭合子图。什么是最大权闭合子图?对于一张有向图 G=<V,E>G=<V,E>G=<V,E>,我们从中选出一些点,如果这些点满足以下条件,就称这些点组成的图为闭合子图:对于每一个被选出来的点,其在图 GGG 中能够到达的点都已经被选出来了。比如说下面这张图,(a,b,c,d),(b,c,d)(a,b,c,d),(b,c,d)(a,b,c,d),(原创 2021-06-03 15:55:29 · 335 阅读 · 0 评论 -
P3640 [APIO2013]出题人 题解
一道神仙图论题,很考验各位对最短路以及染色问题的理解。首先说明 1 点,实质上神秘问题就是经典的染色问题。这里首先简要分析一下给出的几个代码的特色:FloydWarshall:稳定的 O(V3)O(V^3)O(V3) 运行。下称 Floyd。OptimizedBellmanFord:加了优化的 Bellman-Ford,但是只要在每一轮松弛的时候有一个点的 disdisdis 被改变了就会被彻底卡成 O(V2E)O(V^2E)O(V2E),于是负环可以排上用场。下称 Bellman-Ford/B原创 2021-05-19 20:01:53 · 320 阅读 · 0 评论 -
图论专题-学习笔记:割点与桥
图论专题-学习笔记:割点与桥1. 前言2. 割点2.1 定义2.2 求法3. 桥2.1 定义2.2 求法2.3 易错点4. 总结1. 前言割点与桥,是图论的一个分支,常使用 Tarjan 算法实现。没错又是这个算法注意割点与桥中的 Tarjan 算法与强连通分量中的 Tarjan 算法在具体实现上有所不同。前置知识:dfs 树 / dfs 序2. 割点例题:P3388 【模板】割点(割顶)2.1 定义2.2 求法3. 桥2.1 定义2.2 求法2.3 易错点4. 总结.原创 2021-05-11 14:46:36 · 399 阅读 · 0 评论 -
图论专题-学习笔记:差分约束
图论专题-学习笔记:差分约束1. 前言2. 详解3. 总结1. 前言差分约束是一种最短路算法,专门用来解决下面这类问题:已知 nnn 个正整数 x1,x2,...,xnx_1,x_2,...,x_nx1,x2,...,xn,与 mmm 个形如 xi−xj≤k,k∈Zx_i-x_j \leq k,k \in Zxi−xj≤k,k∈Z 的不等式,问是否存在一组解使得 x1,...,xnx_1,...,x_nx1,...,xn 满足上述不等式并求出任意一组解。前置知识:SPFA。2. 详解原创 2021-05-04 16:16:27 · 161 阅读 · 0 评论 -
图论专题-学习笔记:树的直径
图论专题-学习笔记:树的直径1. 前言2. 详解2.1 定义2.2 求法2.2.1 DFS 求解2.2.2 树形 DP 求解2.3 代码3. 总结1. 前言树的直径是树的一个小板块,但是有着重要的应用。前置知识:树的基础知识。2. 详解例题:SP1437 PT07Z - Longest path in a tree2.1 定义树的直径:一棵树上最长的路径叫做树的直径。比如下面这棵树,带有边权 1 的路径就是树的直径。需要注意的是,这棵树的直径不止一条,但是一般情况下我们只取其中一条叫做这原创 2021-04-29 20:21:28 · 344 阅读 · 0 评论 -
P3623 [APIO2008]免费道路 题解
最小生成树好题。下面规定鹅卵石路长度为 1,水泥路长度为 0,则题中要求的是一棵边权为 kkk 的生成树。这道题一开始的时候我会认为边权为 1 的边可以随便加,毕竟根据样例来看,删这一条换另一条并没有什么问题。于是就有一种做法是先选好 kkk 条 1 边,然后剩下的 0 边随意加。然而根据下面这张图,你就会发现上述做法有问题:...原创 2021-04-29 16:09:12 · 207 阅读 · 0 评论 -
图论专题-学习笔记:次短路与次小生成树
图论专题-学习笔记:次短路与次小生成树1. 前言2. 次短路3. 次小生成树4. 总结1. 前言次短路与次小生成树,是由最短路与最小生成树扩展而来的算法。在往下看之前,请先确保你了解最短路与最小生成树。没有学过建议左转洛谷模板,右转百度搜索。难道泥萌没有发现上面两个字对应的模板是不一样的吗qwq2. 次短路本文采用 dijkstra 求最短路。例题:P2865 [USACO06NOV]Roadblocks G题意简述:已知一张 nnn 点 mmm 边的图,求出这张图的严格次短路长度。严原创 2021-04-27 15:29:47 · 264 阅读 · 0 评论 -
图论专题-学习笔记:强连通分量
图论专题-学习笔记:强连通分量1. 前言2. 定义3. 求法4. 应用5. 总结1. 前言强连通分量,是图论的一个东西。这个东西可以将有向图变为一张 DAG,而在 DAG 上就可以使用各种玄学技巧了。2. 定义分量的定义:在一张给定的有向图中,如果点 a,ba,ba,b 能够互相到达,就称点 a,ba,ba,b 在一个分量中。显然的,分量具有传递性,即若 a,ba,ba,b 在一个分量,b,cb,cb,c 在一个分量,那么 a,ca,ca,c 也在一个分量。强连通分量:对于一张图 GGG,设其原创 2021-04-16 20:48:25 · 684 阅读 · 0 评论 -
算法学习笔记:网络流#6——dinic 求解费用流
算法学习笔记:网络流#6——dinic 求解费用流1. 前言2. 详解3. 总结1. 前言本篇博文将会重点讲解 dinic 求解费用流。费用流全称:最小费用最大流,其一般的问题描述如下:给出一张网络 G=<V,E>G=<V,E>G=<V,E>,每条边有两个权值:f,vf,vf,v。fff 表示这条边的最大流量,vvv 表示单位花费,也就是说从这条边每流过一单位流量就要增加 vvv 的花费。现在要求这张网络的最小费用最大流,也就是在保证总流量最大的情况下总费用最原创 2021-03-30 14:37:42 · 1661 阅读 · 0 评论 -
算法学习笔记:网络流#5——EK 求解费用流
算法学习笔记:网络流#5——EK 求解费用流1. 前言2. 详解3. 总结1. 前言费用流,全程最小费用最大流,是网络流的一个分支。最小费用最大流的问题描述如下:给出一张网络 G=<V,E>G=<V,E>G=<V,E>,每条边有两个权值:f,vf,vf,v。fff 表示这条边的最大流量,vvv 表示单位花费,也就是说从这条边每流过一单位流量就要增加 vvv 的花费。现在要求这张网络的最小费用最大流,也就是在保证总流量最大的情况下总费用最小。在往下看之前,您需原创 2021-03-26 16:26:01 · 461 阅读 · 1 评论 -
算法学习笔记:网络流#4——ISAP 求解最大流
算法学习笔记:网络流#4——ISAP 求解最大流1. 前言2. 模板2.1 详解2.2 正确性证明2.3 代码3. 算法对比3.1 一般数据下的对比3.2 特殊数据下的对比1. 前言本篇博文将会重点讲解 ISAP 求解最大流。ISAP 求解最大流,是目前笔者知道的 除了 HLPP 之外的速度最快的最大流算法。在学习 ISAP 求解最大流之前,您需要对以下知识有所了解,包括但不限于:网络流基础定义,FF/EK 求解最大流的 思路,dinic 求解最大流的 代码实现。如果您对上述部分内容不熟悉,可以前原创 2021-03-20 10:37:26 · 754 阅读 · 0 评论 -
算法学习笔记:网络流#3——dinic 求解最大流
算法学习笔记:网络流#3——dinic 求解最大流1. 前言2. 模板2.1 详解2.2 正确性证明2.3 代码3. 总结1. 前言本篇博文讲解求解最大流的 dinic 算法。在学这篇博文之前,请先确保掌握以下知识:网络流的一些基础定义,参见:算法学习笔记:网络流#1——有关内容+算法导航FF 与 EK 求解最大流的思路,参见:算法学习笔记:网络流#2——EK 求解最大流下面假设读者已经掌握上述内容。先来回顾 EK 求解最大流的思路:利用 BFS 不断寻找增广路,不断推流,直到找不到增广路原创 2021-03-19 19:41:51 · 952 阅读 · 2 评论 -
算法学习笔记:网络流#2——EK 求解最大流
算法学习笔记:网络流#2——EK 求解最大流1. 前言2. 例题2.1 详解2.2 正确性证明2.3 做法与代码3. 总结1. 前言本篇博文为 EK 算法求解最大流。在往下看之前,请先确保您已经了解网络流的一些基础定义,包括但不限于网络,流量,源点,汇点,最大流定义。如果您对上述定义有一部分不了解,可以前往这篇博文查看:算法学习笔记:网络流#1——有关内容+算法导航2. 例题模板题:P3376 【模板】网络最大流P.S.:洛谷还有一道加强版最大流,那道题只能使用 HLPP(最高标号预留推进)加原创 2021-03-18 19:48:45 · 525 阅读 · 2 评论 -
算法学习笔记:网络流#1——有关内容+算法导航
算法学习笔记:网络流#1——有关内容+算法导航1. 前言2. 详解3. 算法导航1. 前言网络流,属于图论的一种。网络流看上去是一个新的东西,实际上就是新瓶装旧酒,相信讲完之后你会发现这玩意的一些基础定义什么的跟 有向图 没啥差别。因为网络流算法有点多,于是本文在讲述基础定义之外同时提供算法导航,将后续的算法学习笔记添加入本博客中。2. 详解首先我们需要明白一点:网络流是个啥?实际上,网络流就是一张无向图,只不过给图上的东西换了换名字。比如看看下面这张图。(绘图工具:Graph Edit原创 2021-03-17 21:27:13 · 293 阅读 · 0 评论 -
算法学习笔记:二分图#2——匈牙利算法
算法学习笔记:二分图#2——匈牙利算法1. 前言2. 例题3. 总结1. 前言本篇博文将会专门讲述匈牙利算法的具体思路,实现过程以及正确性证明。匈牙利算法是在 O(n×e+m)O(n \times e+m)O(n×e+m) 内的时间内寻找二分图的最大匹配的一种算法,其中 nnn 为左部点个数,mmm 为右部点个数。在学习匈牙利算法之前,请先确保掌握以下名词:二分图匹配与最大匹配增广路如果对上述部分名词没有掌握,请先掌握后再来学习。懒得百度?传送门:算法学习笔记:二分图#1——定义+性质原创 2021-03-16 15:45:56 · 340 阅读 · 0 评论 -
算法学习笔记:二分图#1——定义+性质+判定
算法学习笔记:二分图#1——定义+性质+判定1. 前言2. 定义1. 前言从本篇博文开始,将学习二分图的有关知识。二分图是图论当中很重要的一个板块,由二分图的匹配与带权匹配可以推广出一般图的匹配与带权匹配。本篇博文主要讲解:二分图的定义、性质、判定。特别提醒的是,本篇博文不会给出任何例题与代码,完全就是一篇理论博文。本文部分地方参考了 oi-wiki 的资料,在此表示感谢。2. 定义二分图的官方定义如下:给出图 G=<V,E>G=<V,E>G=<V,E>原创 2021-03-15 21:18:04 · 542 阅读 · 0 评论 -
树链剖分算法总结&专题训练
树链剖分算法总结&专题训练1. 前言2. 题单[P3313 [SDOI2014]旅行](https://www.luogu.com.cn/problem/P3313)[P2486 [SDOI2011]染色](https://www.luogu.com.cn/problem/P2486)[P1505 [国家集训队]旅游](https://www.luogu.com.cn/problem/P1505)1. 前言本篇博文为树链剖分的算法总结与专题训练。没有学过树链剖分?传送门:算法学习笔记:树链剖原创 2021-03-12 21:46:29 · 209 阅读 · 0 评论 -
算法学习笔记:树链剖分
算法学习笔记:树链剖分1. 前言2. 详解1. 前言树链剖分,是一种树上的算法,将树划分为若干条链,然后利用线段树来处理树上信息。在学树链剖分之前,你需要了解的知识:DFS 序。线段树的基础操作。2. 详解模板题:P3384 【模板】轻重链剖分...原创 2021-03-09 14:09:55 · 412 阅读 · 1 评论 -
并查集算法总结&专题训练
1.概述并查集是一种数据结构,用于图论之中(更多时候用于树),通常用来维护一张无向图内 O(1)O(1)O(1) 判断两个点是否在同一个连通块内,有很多的用法,扩展性也比较高。2.例题下面还是通过一道例题讲解并查集的用法。link我们假设这 4 个元素分别表示 4 个人。假设每个人都会在一个群内,第 iii 个人的群主表示为 faifa_ifai (其实如果抽象成一棵树,就是 iii 的父亲节点)初始时,每一个人单独在一个群内,则令 fai=ifa_i=ifai=i (这一步是并查集的初始化原创 2020-11-23 21:50:46 · 374 阅读 · 1 评论 -
CF1027D Mouse Hunt 题解
先容我吐槽一句:话说老鼠竟然变成了可怕的怪物。。。。。。有那么可怕吗?好吧还真有开始正题。显然这是一道图论题。我们将 nnn 个房间视为 nnn 个点,将 (i,ai)(i,a_i)(i,ai) 连一条边。那么问题就变成了:在一张有向图上,每个点都有权值 cic_ici,选取一些点使得所有点沿边行动过程中一定会碰上这些点,求最小权值和。这不是就变成了求环上最小权值吗?为什么?首先对于一个环(包括自环),如果环上有一个点被选中,那么其余点都能到这个点。那么那些不在环上的呢?由于每一个点恰好原创 2021-02-08 14:10:11 · 175 阅读 · 0 评论 -
CF721C Journey 题解
题目给了我们一张 DAG,对于 DAG 常用的方法就是拓扑排序。题目要求一条从 1 到 nnn 的路径, 点数尽量多但是距离不能超过 kkk,那么我们考虑 DP 解决这个问题。设 fi,jf_{i,j}fi,j 表示从 1 开始经过 iii 个点,到达 jjj 点的最短路径,那么首先满足最优性。而拓扑排序的一条重要性质就是只有入度为 0 的点才能处理,恰好满足无后效性。于是我们就可以设计出这样的状态转移方程:fi+1,v=min{fi,u+disu−>v∣u∈S}f_{i+1,v}=\m原创 2021-02-01 12:37:43 · 188 阅读 · 0 评论 -
CF292D Connected Components 题解
这道题给各位一种不一样的做法。首先显然可以使用并查集维护连通块个数,但是我们知道并查集 不支持删除,而题目是 区间询问,所以:不支持删除+区间询问=回滚莫队!所以这道题可以用回滚莫队通过,没学过的可以看看 这篇博文。然后呢?我们让 rrr 初始为 mmm ,lll 为 (i−1)∗block+1(i - 1) * block + 1(i−1)∗block+1,反向回滚莫队即可。代码:#include <bits/stdc++.h>using namespace std;type原创 2021-01-06 11:36:54 · 272 阅读 · 0 评论 -
P4074 [WC2013]糖果公园 题解
这道题可以说是一道树上带修莫队的板子题。虽然评级是黑的,但是树上带修莫队本身还是比较好想的。就是代码很难调。树上莫队:树上莫队的本质就是利用欧拉序将树上莫队问题变成序列莫队问题。我们设 {eular}\{eular\}{eular} 表示欧拉序序列, firi,lasifir_i,las_ifiri,lasi 表示节点 iii 在欧拉序中第一次出现与第二次出现的位置。那么当询问为 x,yx,yx,y 时(此处我们规定 xxx 的深度小于 yyy),如果 lca(x,y)=xlca(x,y)=xlc原创 2020-12-08 19:55:50 · 165 阅读 · 1 评论 -
算法学习笔记:树上最近公共祖先(LCA)
树上最近公共祖先(LCA),主要用于在一棵树上查找两个节点的最近公共祖先。模板题相信各位看完样例及解释后,明白了 LCA 是什么意思。接下来进入算法环节。暴力算法直接存树后读入 xxx , yyy ,直接 dfs 扫一遍,暴力求出结果。当然,在 5∗1055*10^55∗105 的数据范围下,肯定会 TLE 。所以,我们引入倍增解决此题。倍增实际上,求 LCA 的方式不仅有 LCA ,还有 Tarjan ,树链剖分等等算法,但是倍增解决实际上是最易于理解的,对新手而言相当友善。前置知原创 2020-08-28 16:44:17 · 917 阅读 · 0 评论 -
P2916 [USACO08NOV]Cheering up the Cow G 题解
前置知识:最小生成树算法(Kruskal/Prim)例题算法分析:这一道题中给出一个无向图,求从任意一点开始经过每一点的最短路径。既然要经过每一个点,还要求最短路径,算法就是最小生成树了。我用的是 Kruskal 算法。有一点需要注意:每条路的长度需要如何计算?约翰需要经过每一条道路两次,并且每走一次,就需要安慰这条路后的奶牛,所以路径长度=道路长度*2+安慰两头奶牛时间代码如下:...原创 2020-03-08 22:02:43 · 254 阅读 · 0 评论 -
P1111 修复公路 题解
这道题就是并查集的练手好题QAQ如果对并查集不熟悉的同学可以做一下这道题来看一下题目:给出A地区的村庄数N,和公路数M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)我们可以将这N个村庄看成N个点,其中M是我们要合并的次数。很明显,修路...原创 2019-08-29 21:41:34 · 775 阅读 · 0 评论