From 65c9d14adf7d15f54a256ef1f514b95fa001d9e5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=BF=83=E6=97=B7=E7=A5=9E=E6=80=A1?= Date: Fri, 31 Aug 2018 21:35:06 +0800 Subject: [PATCH] Update min-circle.md --- docs/graph/min-circle.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/graph/min-circle.md b/docs/graph/min-circle.md index de6fb934..c3920469 100644 --- a/docs/graph/min-circle.md +++ b/docs/graph/min-circle.md @@ -1,24 +1,24 @@ ## 问题 -给出一个图,问其中的有n个节点构成的边权和最小的环(n>=3)是多大。 +给出一个图,问其中的有 $n$ 个节点构成的边权和最小的环 $(n\ge 3)$ 是多大。 ### 暴力解法 -设 $u$ 和 $v$ 之间有一条边长为 $w$ 的边, $dis(u,v)$ 表示删除 $u$ 和 $v$ 之间的连边之后, $u$ 和 $v$ 之间的最短路 +设 $u$ 和 $v$ 之间有一条边长为 $w$ 的边, $dis(u,v)$ 表示删除 $u$ 和 $v$ 之间的连边之后, $u$ 和 $v$ 之间的最短路。 -那么最小环是 $dis(u,v)+w$ +那么最小环是 $dis(u,v)+w$ 。 -总时间复杂度 $O(n^2m)$ 。 +总时间复杂度 $O(n^2m)$。 ### Dijkstra -枚举所有边,每一次求删除一条边之后对这条边的起点跑一次 Dijkstra ,道理同上 +枚举所有边,每一次求删除一条边之后对这条边的起点跑一次 Dijkstra ,道理同上。 -时间复杂度$O(m(n+m)logn)$ +时间复杂度 $O(m(n+m)logn)$。 ### Floyd -最小环是自己到自己的距离,所以我们强迫最短路出去跑一遍就行了 +最小环是自己到自己的距离,所以我们强迫最短路出去跑一遍就行了。 怎么强迫? @@ -28,7 +28,7 @@ dis[i][i]=(1<<30); ``` -然后利用floyd的性质,跑完之后对所以的dis[i][i]取min即可 +然后利用floyd的性质,跑完之后对所以的 $dis[i][i]$ 取 $\min$ 即可。 ## 例题 @@ -42,15 +42,15 @@ GDOI2018 Day2 巡逻 3.询问点 $x$ 所在的最小环大小 -对于50%的数据,有N,Q <= 100 +对于 50% 的数据,有 $N,Q \le 100$ -对于每一个点 x 所在的简单环,都存在两条与 x 相邻的边,删去其中的任意一条,简单环将变为简单路径。 +对于每一个点 $x$ 所在的简单环,都存在两条与 $x$ 相邻的边,删去其中的任意一条,简单环将变为简单路径。 -那么枚举所有与 x 相邻的边,每次删去其中一条,然后跑一次dijkstra。 +那么枚举所有与 $x$ 相邻的边,每次删去其中一条,然后跑一次 Dijkstra。 或者直接对每次询问跑一遍 Floyd 求最小环,$O(qn^3)$ -对于100%的数据,有N,Q <= 400 +对于 100% 的数据,有 $N,Q \le 400$ 还是利用 Floyd 求最小环的算法。 @@ -58,7 +58,7 @@ GDOI2018 Day2 巡逻 然而第二步的求解改用 Floyd 来得出。 -那么答案就是要求出不经过询问点 x 的情况下任意两点之间的距离。 +那么答案就是要求出不经过询问点 $x$ 的情况下任意两点之间的距离。 怎么在线? @@ -66,6 +66,6 @@ GDOI2018 Day2 巡逻 将询问按照时间顺序排列,对这些询问建立一个线段树。 -每个点的出现时间覆盖所有除去询问该点的时刻外的所有询问,假设一个点被询问 x 次,则它的出现时间可以视为 x + 1 段区间,插入到线段树上。 +每个点的出现时间覆盖所有除去询问该点的时刻外的所有询问,假设一个点被询问 $x$ 次,则它的出现时间可以视为 $x + 1$ 段区间,插入到线段树上。 完成之后遍历一遍整棵线段树,在经过一个点时存储一个 Floyd 数组的备份,然后加入被插入在这个区间上的所有点,在离开时利用备份数组退回去即可。 -- 2.11.0