跳到主要内容

京都大学 情報学研究科 数理工学専攻 2014年8月実施 アルゴリズム基礎

Author​

祭音Myyura

Description​

G=(V,E)G = (V, E) を節点集合 VV、枝集合 EE から成る連結な単純無向グラフとし、節点 uu の隣接の集合を N(u)N(u) と書く。 GG の部分グラフ HH における節点 uu から節点 vv への最短路内の枝数を distH(u,v)\text{dist}_H(u,v) と書き、HH における節点 uu から節点 vv への最短路の総数を σH(u,v)\sigma_H (u,v) と書く。 始点 s∈Vs \in V を選び、TT を ss からの幅優先探索により得られた GG の全域木とする。 以下の問いに答えよ。

(i) TT を用いて、dmax⁡=max⁡{distG(s,u)∣u∈V}d_{\max} = \max \{\text{dist}_G(s,u) \mid u \in V\} および Vi={u∈V∣distG(s,u)=i}V_i = \{u \in V \mid \text{dist}_G(s, u)=i\}, i=0,1,…,dmax⁡i=0,1,\ldots, d_{\max} を O(∣V∣)O(|V|) 時間で計算する方法を示せ。

(ii) {σG(s,u)∣u∈V}\{\sigma_G(s, u) \mid u \in V\} 内のすべての値を O(∣E∣)O(|E|) 時間で計算する方法を示せ。

(iii) ある節点 t∈V−{s}t \in V - \{s\} と節点の部分集合 A⊆V−{s,t}A \subseteq V - \{s,t\} に対して、GG における ss から tt への最短路のうち、AA の節点を1個は通過するものの個数を O(∣E∣)O(|E|) 時間で計算する方法を示せ。

(iv) ある節点 t∈V−{s}t \in V - \{s\} と節点の部分集合 A⊆V−{s,t}A \subseteq V - \{s,t\} に対して、GG における ss から tt への最短路のうち、AA の節点を少なくとも2個通過するものが存在するかどうかの判定を O(∣E∣)O(|E|) 時間で計算する方法を示せ。

题目描述​

设 G=(V,E)G=(V,E) 为由顶点集 VV 和边集 EE 构成的连通简单无向图,N(u)N(u) 表示顶点 uu 的邻接点集合。对 GG 的子图 HH,以 dist⁡H(u,v)\operatorname{dist}_H(u,v) 表示 HH 中从 uu 到 vv 的最短路边数,以 σH(u,v)\sigma_H(u,v) 表示这类最短路的总条数。选定起点 s∈Vs\in V,令 TT 为从 ss 进行广度优先搜索得到的 GG 的生成树。回答:

  1. 利用 TT,在 O(∣V∣)O(|V|) 时间内计算
    dmax⁡=max⁡{dist⁡G(s,u)∣u∈V}d_{\max}=\max\{\operatorname{dist}_G(s,u)\mid u\in V\}
    以及每一层
    Vi={u∈V∣dist⁡G(s,u)=i},i=0,1,…,dmax⁡.V_i=\{u\in V\mid\operatorname{dist}_G(s,u)=i\}, \quad i=0,1,\ldots,d_{\max}.
  2. 给出在 O(∣E∣)O(|E|) 时间内计算所有 {σG(s,u)∣u∈V}\{\sigma_G(s,u)\mid u\in V\} 的方法。
  3. 对给定的 t∈V∖{s}t\in V\setminus\{s\} 和 A⊆V∖{s,t}A\subseteq V\setminus\{s,t\},在 O(∣E∣)O(|E|) 时间内计算从 ss 到 tt 且至少经过一个 AA 中顶点的最短路条数。
  4. 对同样的 t,At,A,在 O(∣E∣)O(|E|) 时间内判定是否存在从 ss 到 tt 且至少经过两个 AA 中顶点的最短路。

Kai​

Almost the same as 京都大学 情報学研究科 数理工学専攻 2024年8月実施 グラフ理論, please check it.

(i) 与えられた木を使う点​

TT を根 ss から深さ優先探索または幅優先探索し、各頂点の深さを記録する。 TT は GG の幅優先探索木なので、この深さは dist⁡G(s,u)\operatorname{dist}_G(s,u) に等しい。 深さごとに頂点をリストに入れ、最大の深さを求めればよい。 木の辺数は ∣V∣−1|V|-1 なので、ここでは GG の全辺を再走査せず O(∣V∣)O(|V|) 時間となる。

(ii)–(iv) 本問への適用​

(ii) は上記リンクの層ごとの最短路数の漸化式を使う。 (iii) では距離が 11 増える辺だけを使い、AA の頂点への遷移を禁止して数えた経路数を 全最短路数から引く。「AA を削除したグラフの最短路」を数えると、元の最短距離より長い経路を含み得るので、元の層を維持する。 (iv) は各頂点までの最短路上で通る AA の頂点数の最大値を動的計画法で求め、終点で 22 以上かを判定する。 どちらも辺を高々定数回調べるので O(∣V∣+∣E∣)=O(∣E∣)O(|V|+|E|)=O(|E|) 時間である(∣V∣≥2|V|\ge2)。 経路数の加算を定数時間とする計算モデルを用いる。