随笔分类 -  图论算法

摘要:[BZOJ 4771]七彩树(可持久化线段树+树上差分) 题面 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点。每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i]。如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色。定义depth[i]为i节点与根节点的距离。为了方 阅读全文
posted @ 2019-07-14 21:25 birchtree 阅读(404) 评论(1) 推荐(0)
摘要:[Codeforces 464E] The Classic Problem(可持久化线段树) 题面 给出一个带权无向图,每条边的边权是$2^{x_i}(x_i include include include include include define maxn 500000 define maxm 阅读全文
posted @ 2019-07-14 20:26 birchtree 阅读(457) 评论(0) 推荐(0)
摘要:题面 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权。其中lastans是上一个询问的答案,初始为0,即第一个询问的u是明文。 分析 第i棵主席树存储dfs序(dfn)为i的节点到根的链上序列,按dfn更新 查询用 阅读全文
posted @ 2019-05-12 11:50 birchtree 阅读(192) 评论(0) 推荐(0)
摘要:题面 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N 1条道路,并且任何两个村庄之间有且仅有一条路径可达。游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可以任意在地图的道路上行走,若走到某个村庄中有宝物,则视为找到该村庄内的宝物,直到找到所有宝物并返回到最初转移到的村庄为 阅读全文
posted @ 2019-05-06 21:56 birchtree 阅读(188) 评论(0) 推荐(0)
摘要:最小割树(Gomory Hu Tree) 前置知识 Gomory Hu Tree是用来解决无向图最小割的问题的,所以我们需要了解无向图最小割的定义 和有向图类似,无向图上两点(x,y)的割定义为一个边集E,满足去掉该边集后x,y不联通。最小割即为所有的割中权值之和最小的割 通过这条割我们把点集划为两 阅读全文
posted @ 2019-04-24 11:59 birchtree 阅读(2877) 评论(1) 推荐(0)
摘要:题面 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道。 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上。 在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a,b 的最短路径。 现在国家有很多个计划,每个计划都是这样,我们选中了 k 个点,然后在它们两两之间 阅读全文
posted @ 2019-03-21 15:17 birchtree 阅读(279) 评论(0) 推荐(0)
摘要:题面 贝茜被农民们逼进了一个偏僻的农场。农场可视为一棵有N个结点的树,结点分别编号为 1,2,…,N 。每个叶子结点都是出入口。开始时,每个出入口都可以放一个农民(也可以不放)。每个时刻,贝茜和农民都可以移动到相邻的一个结点。如果某一时刻农民与贝茜相遇了(在边上或点上均算),则贝茜将被抓住。抓捕过程 阅读全文
posted @ 2019-03-20 21:25 birchtree 阅读(234) 评论(0) 推荐(0)
摘要:分析 此题跟“方格染色”一样 先对棋盘黑白染色(这是常见套路),我们发现,如果选了一个黑点,那相邻的白点就不能选,反之同理 出现了冲突关系,考虑最大权闭合子图 把黑点看成正权点,白点看成负权点,黑点向能走到的白点连边,跑最大权闭合子图即可 代码 cpp include include include 阅读全文
posted @ 2019-02-25 15:00 birchtree 阅读(314) 评论(0) 推荐(0)
摘要:分析 先对棋盘黑白染色(这是常见套路),我们发现,如果选了一个黑点,那相邻的白点就不能选,反之同理 出现了冲突关系,考虑最大权闭合子图 把黑点看成正权点,白点看成负权点,黑点向相邻白点连边,跑最大权闭合子图即可 代码 cpp include include include include defin 阅读全文
posted @ 2019-02-25 14:53 birchtree 阅读(323) 评论(0) 推荐(0)
摘要:分析 最大权闭合子图模板题 把实验获得的收益看成正权点,仪器费用看成负权点,每个实验向所需要的仪器连边 跑最大权闭合子图即可 详见 "https://www.cnblogs.com/birchtree/p/10304793.html" 代码 cpp include include include i 阅读全文
posted @ 2019-02-25 14:50 birchtree 阅读(441) 评论(0) 推荐(0)
摘要:题面 "传送门" 分析 观察题目中的这段伪代码,发现实际上就是求出每个节点的DFS序, 注意 ,要按编号从小到大访问每个节点,所以要对邻接表排序(可以用vector实现) 对询问离线,每个结点保存由该节点出发所有询问 第一次DFS, 求出每个点到根节点的距离,以及DFS序。顺便把每个节点的子树对应的 阅读全文
posted @ 2019-02-09 10:26 birchtree 阅读(289) 评论(0) 推荐(0)
摘要:[luogu 2754] 家园 "传送门" 分层图上的最大流.按时间分层 建图方法: 时间t不断增加,每一天: (1)从源点向每一天的地球连容量为INF的边,流过该点相当于当天从地球出发 (2)从每一天的月亮向汇点连容量为INF的边,流过该点相当于当天到达月球 (3)从上一天的每一个中转站向当天的对 阅读全文
posted @ 2019-02-05 16:57 birchtree 阅读(337) 评论(0) 推荐(0)
摘要:[luogu 2763] 试题库问题 "传送门" 二分图多重匹配 建图方法: s=0,t=n+m+1 (1)S向第i个试题连边,容量为1,保证每个试题只被选一次 (2)第i个试题编号为i,向所属种类连边,容量为1 (3)第i个种类编号i+n,为向t连边,容量为需要该类型的数量 求出最大流f,如果f不 阅读全文
posted @ 2019-02-05 16:33 birchtree 阅读(380) 评论(0) 推荐(0)
摘要:[luogu 2766] 最长不下降子序列问题 "传送门" 第一问: $O(n^2)$ 的DP求LIS 为了下面叙述方便,我们将DP过程讲一遍 子状态:dp[i]表示以a[i]结尾的LIS长度 初始条件:dp[i]=1 状态转移方程:$dp[i]=dp[j]+1(j include include 阅读全文
posted @ 2019-02-05 16:06 birchtree 阅读(611) 评论(0) 推荐(0)
摘要:[luogu 3254] 圆桌问题 "传送门" 二分图多重匹配,将单位看作左部节点,餐桌看作右部节点 限制为每个左部节点最多连r[i]条边,每个右部节点最多连c[i]条边 最大流即可 cpp include include include include include include define 阅读全文
posted @ 2019-02-05 15:49 birchtree 阅读(131) 评论(0) 推荐(0)
摘要:题面 "传送门" 分析 考虑网络流 注意到数据包走的是最短路,所以我们只需要考虑在最短路上的边 由于最短路可能有多条,我们先跑一遍Dijkstra,然后再$O(m)$ 遍历每条边(u,v,w) 如果dist[u]=dist[v]+w,则这条边肯定在最短路上 然后点的容量限制可以用拆点来解(常见套路) 阅读全文
posted @ 2019-01-29 11:21 birchtree 阅读(200) 评论(0) 推荐(0)
摘要:[luogu 2756]飞行员配对方案问题 题面 "luogu 2756" 英国飞行员为左部节点,外国飞行员为右部节点,直接跑二分图匹配即可 cpp include include include define maxn 105 using namespace std; struct edge{ i 阅读全文
posted @ 2019-01-24 15:05 birchtree 阅读(582) 评论(0) 推荐(0)
摘要:【施工中】 网络流24题题解及常见套路总结 本文已重置,请访问 https://www.cnblogs.com/birchtree/p/12912607.html 查看最新版本 目录 点击链接进入各题题解,常见套路总结见下方 问题名称 问题模型 转化模型 飞行员配对方案问题 二分图最大匹配 最大流 阅读全文
posted @ 2019-01-22 17:01 birchtree 阅读(2238) 评论(0) 推荐(0)
摘要:题面 "传送门" 分析 没想到压轴题是道模板裸题 由于子图的权值=边权和 点权和 将边和点都看成新图中的点 S向原来的边i连边,权值为边权 点i向T连边,权值为点权 边i:(u,v,w)向u,v,连边,权值INF 答案即为总边权 最小割 理论时间复杂度为$O(n^2m)$,但由于Dinic在随机图上 阅读全文
posted @ 2019-01-22 16:56 birchtree 阅读(262) 评论(0) 推荐(0)
摘要:题面 "传送门" 分析 游戏的操作有以下性质: 1.如果两个格子在同一列,那么无论如何操作,这两个格子都在同一列。 2.如果两个格子在同一行,那么无论如何操作,这两个格子都在同一行。 3.可以通过操作改变改点在对应行和列中的位置。 我们发现对于第i行,我们必须要找到某一列上的黑格子挪过来放在对角线上 阅读全文
posted @ 2018-12-29 21:59 birchtree 阅读(144) 评论(0) 推荐(0)