培訓- 4 グラフ理論
グラフ理論
c2251393 November 7, 2013
1 圖 ?
圖 的 一 圖 (Graph) 的 的圖
(Graph) 圖 (Picture) 一 的 在 Graph 點 (Vertex)
的元 (Edge) 元 的 點 的
點 連一 Edge 與
Graph 的 點與點 的 點的 的 的
的
1.1 一
1. 圖 (Graph) : 一張圖 一 點 一 的
G= (V, E) G 圖 V 點 E 的
2. 點 ( 點,Vertex,Node) : 的元 的 圖 G 的點 V(G) 點的
3. (Edge) : 的 圖 G的 E(G) e(v1, v2)
存在一 連 v1&v2 的 雙 的 (Undirected
edge, Edge) e(v1, v2) = e(v2, v1); (Directed
edge) (Arc) e(v1, v2) 一 v1 v2 的 v1
一 v2 v1 與 v2 一 一
4. (Adjacent) : 點 的 v1 與 v2 存在
e(v1, v2) or e(v2, v1)
5. 圖 (Undirected Graph) : 的圖
6. 圖 (directed Graph) : 的圖
7. 圖 (Mixed Graph) : 的圖
I
1.2 在電腦上存一張圖 グラフ理論
8. 路徑 (Path) : 一 點 的 v1, e1, v2, e2, , , en−1, vn v1 vn 的一 路; vi ∈V(G), ei ∈E(G), ei =e(vi, vi+1)
9. 路徑 (Simple path) : 一 點 的路徑
10. (Cycle) : 一 路徑 v1 =vn 一
11. (Simple Cycle) : 一 點 ( 點) 的
12. (Degree) : 一 點 v 的 點 deg(v)
13. (In-Degree) : 點 v 的 點與 的
deg+(v)
14. (Out-Degree) : 點v 的 點與 的
deg−(v)
一 ∑
v∈V(G)deg(v)與|E|的 ∑
v∈V(G)deg+(v)與∑
v∈V(G)deg−(v)
的 ( )
1.2 在電腦上存一張圖
Coder 電腦 存 一張圖
1. Adjacent Matrix : 一 A = [ai,j]n×n ai,j 的
e(vi, vj) 的 ( ...) 的 點
O(1) 點 的 點 與
O(|V|2)
2. Adjacent list : 點 一 ( 的
) 與 點 的 的 點 O(|E|+|V|)
點 ( 的 )
3. Forward star : 的 存在一
一 點連 vi 連 的 在一 [si, ei] 通 一
(vi, vj) vi 在 vj 一
的 的
II
2.子圖與特殊圖 グラフ理論
2 子圖與特殊圖
2.1
1. 子圖 Subgraph : 圖 G= (V, E), G′ = (V′, E′) V′ ⊆V, E′ ⊆E G′ G的子圖
2. 圖 Compilment graph : 圖 G 的 圖 Gc V(Gc) = V(G) e ∈ E(G)←→e∈/ E(Gc)
3. 樹Spanning tree : 圖T G的子圖 T 一 樹 T G的
樹
2.2 圖 (Simple graph)
一 e(v, v) e1 =e2 圖 上 的
圖
2.3 連通圖 (Connected graph)
一張圖 G 點 vi, vj 一 路徑連 點 G 通圖
2.4 圖 (DAG)
一張 的 圖 DP 的 與 的圖 DAG
DP 在一張DAG 上 點A 點 B 的 ( ) 路
2.5 圖 (Bipartite graph)
一張 圖G 點 V1, V2 e(vi, vj)∈E(G)
vi&vj G 圖
圖 G 圖 G ( 點
點 與 點 點 與 點 )
2.6 圖 (Complete graph)
圖 G 點 G 圖
III
2.7 平面圖(Plannar graph) グラフ理論
2.7 平面圖 (Plannar graph)
一張圖G 在平面上 G 平面圖 一 平面圖的 平面 的面 F Euler 一 |V| − |E|+|F|= 2
2.8 樹 (Tree)
一 的 圖 G G 的連通圖 G 一 樹
(Tree)
樹 在 圖 G 存在一點 v deg+(v) = 0 點 u
deg+(u) = 1 v u 一 路徑 連 G 一
v 的 樹(Directed Tree)
一
1. 連通圖 G 在 G 一
2. 連通圖 G 一 連通
3. 連通圖 G 點 一 路徑 連
4. 連通圖 G 的 與點 的 |E|=|V| −1
5. 連通圖 G 的 點 G 樹 ( )
2.9 Exercises
1. Island(IOI 2008, HOJ 247)
樹的 路徑(|V| ≤100000) 2. Dreaming(IOI 2013, HOJ 288)
樹 樹 l 的 連 一顆 樹
樹的 點 的 ( 點 ≤100000)
3. (99 , HOJ 75)
n(≤ 500) 在 的上
一 的 的
面
IV
3.圖的遍歷 グラフ理論
3 圖的遍歷
Graph traversal 的 一張圖 G 點 v
點的點 點 子圖 T 的 與點的
T G 的 樹 T 樹
3.1 DFS
(DFS) 點的子 點 點 的
DFS的 樹 DFS tree
Algorithm 1DFS
1: function DFS(v)
2: mark v as visited
3: for allu that is adjacent tov do
4: if u is not visitedthen
5: DFS(u)
6: end if
7: end for
8: end function
O(|V|+|E|)
在 DFS 的 :
1. Tree edge : DFS tree上的
2. Back edge : 連 DFS tree上 的 3. Forward edge : 連 DFS tree上 子 點的 4. Cross edge : 上面 的 Cross edge
在遍歷 圖 的
DFS 迴 的 在 stack (Windows) 圖
DFS 的 stack (RE)
DFS 迴 stack ( Judge )
的
V
3.2 BFS グラフ理論
3.2 BFS
與 DFS (BFS) 點 的
DFS Stack( 迴) BFS Queue 存 遍歷的點
Algorithm 2BFS
1: function BFS(v)
2: enqueue v to Q ◃ Q is a queue
3: mark v as visited
4: whileQ is not empty do
5: c← dequeue Q
6: for allu that is adjacent tocdo
7: if u is not visitedthen
8: enqueueu to Q
9: marku as visited
10: end if
11: end for
12: end while
13: end function
DFS 一 的O(|V|+|E|)
BFS tree 在 的圖 一 點 點 (root) 的 (
的 ) 圖上 點的
3.3 Time stamp
在 的 點的 與 的 點的
與 的 DFS
一 在 的
3.4 Topological sort
在 圖 G 一 點的 v1, v2, , , vn 點 vi, vj i < j e(vj, vi) /∈ E(G) 一 (vi, vj) vi 在 vj 的
面
VI
3.5 壓扁一顆樹 グラフ理論
一張 圖的 存在 圖 G的
存在 G DAG 存在
的 的一 子的
Algorithm 3Topo sort #1
procedure Topo sort #1(G(V,E)) a ←[]
for all v ∈V do if deg+(v) = 0 then
enqueue v toQ end if
end for
while Qis not empty do u← dequeueQ
a←a+u
for all v is adjacent to u do deg+(v)←deg+(v)−1 if deg+(v) = 0 then
enqueue v toQ end if
end for end while
if |a| ̸=|V|then return No Topological sort.
else return a end if
end procedure
一 上 的 點的 DFS
3.5 壓扁一顆樹
一顆 樹的 點 子
的 一 的
一 點的 v1, v2, , , vn 一 點 子 點 在
的 的 樹壓扁
的 一 樹的DFS 子 點vs 的
一 va( 一 ) 的 va 子 點 vs 的 的點 v′ va 的 ( 一 子 點 vs 的 )
VII
3.6 Exercises グラフ理論
點 一
樹的 子樹的 點
3.6 Exercises
1. (101 )
n(≤ 5000) ( ) 一的 子
子 的 子
2. Teleporter (POI XVII, HOJ 96)
一張 n(≤ 40000) 點 m(≤ 1000000) 的 圖
( ) 點 1 點 2 的 >4( 圖 點 1 點
2 >4)
3. 子 (TIOJ 1092)
一 DAG 點 一 點的
的路徑 4. Rare Order(UVA 200)
一 的 元 元 的
元 的 的 的
VIII
4.連通元件 グラフ理論
4 連通元件
圖 G的子圖G′ 連通 在G′ 點
G′ 連通元件 連通 連通元件的
4.1 連通 (Strong Connected Component SCC)
子圖 G′ 連通的 點u, v 存在 u v v u 的路徑 的 在 圖上 一 的連通 一 的 通 圖 的SCC
在 圖上 連通元件 的 Tarjan's Kosaraju's
的 Kosaraju's 的:
1.在 G 上DFS 點的
2. 在 圖GT 上 遍歷 一 遍歷 的點 一
SCC
Algorithm 4Kosaraju's
1: procedureKosaraju(G, list[]SCC)
2: mark v ∈V(G)as unvisited
3: GT ←reverse all arc in G
4: for allv ∈V(G) do
5: if v is not visited then
6: DFS(v, G) with time stamp
7: end if
8: end for
9: Count←0
10: mark v ∈V(G) as unvisited
11: for all v in reverse order of time stampdo
12: if v is not visited then
13: DFS(v, GT) with time stamp and add every Vertex into SCC[Count]
14: Count←Count+ 1
15: end if
16: end for
17: end procedure
一 SCC 一 點 的圖 G′ 一 DAG
IX
4.2 點雙連通 グラフ理論
點 在 圖 DP 的 點 SCC
在 DAG上的DP
4.2 點雙連通
在 圖 點雙連通 子圖 G′ 點雙連通 G′ 一點 G′ 連通的
點雙連通元件 圖G的點 V 的元件V1, V2, , , Vn |Vi∩Vj| ≤
1 點雙連通元件 一 點 點
點雙連通元件 連通 點(Articulation Point)
點雙連通元件的 :
1. 點 的 一 子 一 點雙連通子圖 2. 點 連的 的點雙連通元件
4.3 雙連通
點雙連通 雙連通 的
連 雙連通元件的 元件 連通
雙連通元件的 : 連通 一 雙連
通元件
4.4 Tarjan's algorithm in finding Articulation Point and Bridges
面 雙連通元件 點 點 ?
Tarjan 一 O(|V|+|E|)
low&df n 圖 一 DFS 圖 一 樹 上 back
edge 樹 DP 的 low df n
1.df n(v): v 在 樹的
2.low(v) = min(df n(v), df n(u), low(w)) : u v 點的 back edge 連 的 點 w v 在樹上的 子 點
X
4.5 Exercises グラフ理論
low&df n ? 一 一 Bridge 的 一
tree edge 的 點 的子樹 back edge
上 : 點 v v 的 low(v) 點u
的df n(u) e(u, v) 一 Bridge
點 點 v 樹的 root 的 v 上的子 點
v 點 ; root 的 存在一 子 點u df n(v)≤low(u))(
u 上 連 v) v 點
SCC 的
4.5 Exercises
1. Kosaraju 的 2. Office (POI XIV)
一張 圖 G G 的 圖 連通 (|V| ≤105,|E| ≤106) 3. ATM (APIO 2009, HOJ 235)
一張 圖 點 ai 元 在 一 點 n 點 一 點 ?(|V|,|E| ≤ 5×105)
4. Blockade (POI XV, HOJ 68)
一 張 圖 G 點 點 連 通?(|V| ≤ 105,|E| ≤5×105)
5. (TOI 2009 p5)
一張 圖 一 點 一 點 點 的點
的 (O(|V|+|E|))
6. The Tournament (POI XI, HOJ 100)
一張 圖 G (vi, vj) ∈ E(G) i j 雙
在 一
(|V| ≤105,|E| ≤106) 7. 漢
N 漢 一 在 Q
的 一
一 的
XI
5.歐拉迴路 (路徑)與漢米頓迴路 (路徑) グラフ理論
5 歐拉迴路 (路徑) 與漢米頓迴路 (路徑)
5.1 歐拉迴路與歐拉路徑
歐拉 路 (Euler circuit) 在一張圖上的一
一 歐拉路徑(Euler trail) 一 一 的路徑
圖的歐拉迴路
一 點的 點 點 歐拉 路
上 點 點 歐拉路徑上 點 點 點 點
1. 一張圖 歐拉迴路 點 點
2. 一張圖 歐拉路徑 圖上 0 2 點 2 的
歐拉路徑的 點 點
的
在 圖上 歐拉路徑 (迴路) 的 (O(|V|+|E|))
XII
5.2 漢米頓迴路與漢米頓路徑 グラフ理論
Algorithm 5Eulerian Trial
1: procedureFind a Eulerian Trial(G)
2: if there is no odd node in Gthen
3: v ←any node in G
4: else
5: v ←an odd node in G
6: end if
7: DFS(v, G, S) ◃ Eulerian trial will be stored in a stack S
8: returnS
9: end procedure
10:
11: functionDFS(v, G,S)
12: for all uthat is adjacent to v do
13: if edge(v, u)is not visited then
14: mark edge(v, u)as visited
15: DFS(u, G,S)
16: push edge (v, u) into S
17: end if
18: end for
19: end function
圖 圖 :
1. 點 deg+(v) =deg−(v) 存在歐拉迴路
2. 點v1, v2 deg+(v1) = deg(v1)−+ 1, deg+(v2) =deg(v2)−−1 點 v deg+(v) = deg−(v) 存在歐拉路徑
5.2 漢米頓迴路與漢米頓路徑
漢米頓路徑 (Hamilton trail) 圖上一 路徑 路徑 點;
漢米頓迴路 點 點 的漢米頓路徑
的 NP-Complete!! 的 壓
DP O(|V|2×2|V|)的
XIII
5.3 Exercises グラフ理論
5.3 Exercises
1.
一張圖 的漢米頓路徑
2. (99,100 )
一張 圖G 的一 的路徑
XIV