随笔分类 - 图论
图论
摘要:洛谷 P2515 软件安装 题意 现在我们的手头有 \(N\) 个软件,对于一个软件 \(i\),它要占用 \(W_i\) 的磁盘空间,它的价值为 \(V_i\)。我们希望从中选择一些软件安装到一台磁盘容量为 \(M\) 计算机上,使得这些软件的价值尽可能大(即 \(V_i\) 的和最大)。 但是现
阅读全文
摘要:洛谷 P3119 Grass Cownoisseur G 题意 约翰有 \(n\) 块草场,编号 \(1\) 到 \(n\),这些草场由若干条单行道相连。奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草。 贝西总是从 \(1\) 号草场出发,最后回到 \(1\) 号草场。她想经过尽可能多
阅读全文
摘要:洛谷 P5340 大中锋的游乐场 题意 给出一张 \(n\) 个点 \(m\) 条边的图,每个点有一个点权 \(1\) 或 \(-1\)。 给出点 \(s,t\),求出 \((s,t)\) 间满足以下条件的最短路。 任意时刻,走过的路径上点权和均 \(\in[-k,k]\)。 思路 分层图最短路。
阅读全文
摘要:洛谷 P5618 堵塞的交通 题意 有一个 \(2\times C\) 的网格图,需要维护 \(3\) 种操作。 连接相邻的两个格子。 将相邻的两个格子断开连接。 询问两个格子是否联通。 思路1 考虑分块。 连边时块内使用并查集维护,块与块之间用数组标记。 删边块内的边时暴力重构并查集,块之间的边清
阅读全文
摘要:洛谷 P3225 矿场搭建 题意 煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。 请写一个程序,用来计算至少需
阅读全文
摘要:洛谷 P4819 杀人游戏 题意 有 \(n\) 个人,他们之中有一个杀手。 每个人都有可能是杀手,并且概率相等。 你可以询问若干人。 若询问的人是杀手,你会被干掉。 若询问的人是平民,你会知道他认识的所有人的身份。 给出一张有向图表示这 \(n\) 个人的关系。 求出你活着知道杀手是谁的概率。 思
阅读全文
摘要:洛谷 P2403 所驼门王的宝藏 题意 有一个 \(R\times C\) 的网格图,有 \(N\) 个点有传送门和宝藏。 有三种传送门: 一种可以传送至同一行的任意点, 一种可以传送到同一列的任一点, 一种可以传送的周围八个点。 可从任意点开始,任意点结束,求最多走过多少个宝藏。 思路 把网格图建
阅读全文
摘要:洛谷 P3224 永无乡 题意 给出 \(n\) 个点。有两种操作: 在点 \(x\) 和点 \(y\) 之间连一条边。 询问与 \(x\) 联通的点中点权第 \(k\) 小的点。 思路 使用并查集维护连通性。每个联通块用一棵平衡树维护点权,合并时启发式合并。 时间复杂度:\(O(n \log^2n
阅读全文
摘要:电力 题意 求一个图删除一个点之后,联通块最多有多少。 思路 先计算出原来有多少个联通块,再计算每个点对联通块的贡献的最大值。 考虑跑一遍 tarjan,孤立点的贡献为 \(-1\),非割点贡献为 \(0\),割点贡献为 dfs 树上 \(low_v \ge dfn_u\) 的 \(v\) 的个数,
阅读全文
摘要:单词游戏 题意 给出 \(n\) 个字符串。求是否有一种 \(n\) 个字符串的排列,满足前一个字符串的末尾等于这个字符串的开头。 思路 题意可转化为把每个字符串的头向尾连一条有向边,求这个有向图是否有欧拉路径或欧拉回路。 有向图存在欧拉路径的条件:有一个点入度等于出度加一,有一个点出度等于入度加一
阅读全文
摘要:Atcoder Beginner Contest 369 C-Count Arithmetic Subarrays 题意 给出一个长度为 \(n\) 的序列 \(A\),求有多少个 \(A\) 的连续子序列为等差数列。 思路 对于递增的右端点,左端点不减。 使用双指针,枚举右端点,扫描左端点。 时间
阅读全文
摘要:洛谷 P2680 [NOIP2015 提高组] 运输计划 题意 给出一棵树和 \(m\) 条路径,可以选择一条边,把边权改为 \(0\),求 \(m\) 条路经长度最大值的最小值。 思路 看到最大值最小,可以想到二分答案,答案具有单调性。 考虑如何判定答案 \(x\) 是否可行。 统计所有长度大于
阅读全文
摘要:0829-T4 太空帝国 题意 给定一个图有 \(n\) 个点,每个点的坐标为 \((x_i,y_i,z_i)\)。 点 \(i\) 和点 \(j\) 的距离为 \(\min(|x_i-x_j|,|y_i-y_j|,|z_i-z_j|)\)。 求该图的最小生成树。 思路 暴力建图不能通过。 对最小生
阅读全文
摘要:洛谷 P3128 [USACO15DEC] Max Flow P 题意 给定一棵 \(n\) 个点的树,给定 \(k\) 个点对 \((u,v)\),把 \(u\) 到 \(v\) 路径上所有点的点权加一,最后求最大点权。 思路 树上差分模版。 维护 \(a_i\) 表示每个点到根的加法标记。 对于
阅读全文
摘要:洛谷 P10931 闇の連鎖 题意 给定一棵 \(n\) 个点的树,有 \(m\) 条附加边。 第一次删除一条树边,第二次删除一条附加边。 求有多少种方案使原来的树不联通。 思路 考虑求出 \(f_i\) 表示 \(i\) 的子树中有多少条附加边连向 \(i\) 的子树外。 若 \(f_i=0\),
阅读全文
摘要:$tarjan$ 算法求强连通分量 $tarjan$算法简介 我在这篇博客中讲过$tarjan$算法的简介和求割点与桥,就不再讲述。 强连通分量 强连通图是指一个有向图内任意两点都能互相到达,强连通分量就是指一个图的极大(再加一个点就不是了)强连通子图。 思路 和割点与桥类似,还是先把图变成$dfs
阅读全文
摘要:$tarjan$求割点和桥 $tarjan$算法 $tarjan$算法是一个图论算法,它可以求割点,桥,双连通分量,强连通分量等东西。 $tarjan$算法求割点 思路 $tarjan$算法的思路是先通过$dfs$的方式把图建成一棵树,原来的便就分成了在树上的树边和不在树上的虚边,如下图: 这个图通
阅读全文
摘要:【模板】最小生成树(普利姆)(克鲁斯卡尔) 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。 输入格式 第一行包含两个整数 $N,M$,表示该图共有 $N$ 个结点和 $M$ 条无向边。 接下来 $M$ 行每行包含三个整数 $X_i,Y_i,Z_i$,表示有一条长度为
阅读全文
摘要:【模板】最近公共祖先(LCA)(RMQ) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 $N,M,S$,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 $N-1$ 行每行包含两个正整数 $x, y$,表示 $x$ 结点和 $y$
阅读全文
摘要:【模板】最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 $N,M,S$,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 $N-1$ 行每行包含两个正整数 $x, y$,表示 $x$ 结点和 $y$ 结点之间
阅读全文