說不准哪天寫煩了就會把之前的筆記刪了重構一遍(
圖論
基本概念
有向圖及無向圖
有向圖是一對有序偶 \(D=<V,A>\)
- 頂點 + 弧
- \(A\) 是 \(V\) 中的一個二元關系
無向圖是一對有序偶 \(G=<V,E>\)
- 頂點 + 邊
- \(E\) 是 \(V\) 中元素的無序偶組成的多重集合
帶權圖
圖上的邊可以附帶邊權
通常解釋為路徑長度,運費,管道流量等
關聯、相鄰、鄰接的概念
給定有向圖 \(D=<V,A>\),若 \(a=<u,v>\in A\)
- \(u\) 鄰接到 \(v\) (\(u\) 和 \(v\) 鄰接)
- \(a\) 關聯於 \(u\) 和 \(v\)
若兩個弧關聯於同一個頂點,則稱這兩個弧是相鄰的
給定無向圖 \(G=<V,E>\),若 \(e=<u,v>\in E\)
- \(u\) 和 \(v\) 鄰接 (無 鄰接到 的概念)
- \(e\) 關聯與 \(u\) 和 \(v\)
總結: 點與邊關聯,點與點鄰接,邊與邊相鄰
簡單圖
自環:兩個端點相同的弧或邊
平行弧:有向圖中,始點和終點相同的兩條弧
平行邊:無向圖中,兩個頂點之間的兩條邊
多重弧圖:有平行弧的有向圖
多重邊圖:有平行邊的圖
多重圖:多重弧圖 + 多重邊圖
簡單圖:無資環和平行弧(或平行邊)的圖
頂點的次數 / 度數
有向圖分入度 \(id(u)\) 和出度 \(od(u)\)
無向圖只有度 \(d(u) = id(u) + od(u)\)
\(n\) 階圖:有 \(n\) 個頂點的圖
\((n, m)\) 圖:有 \(m\) 條邊或弧的 \(n\) 階圖
- 孤立點:度數為 \(0\) 的點
- 懸掛點:度數為 \(1\) 的點
- 懸掛邊:與懸掛點關聯的邊
- 零圖:每個頂點都是孤立點的圖
- 平凡圖:1 階零圖
握手定理
有向圖中:\(\sum\limits_{i=1}^nod(u_i)=\sum\limits_{i=1}^nid(u_i)=m\)
對於 \((n, m)\) 圖: \(\sum\limits_{i=1}^nd(u_i)=2m\)
奇頂點:度數為奇數的頂點
偶頂點:度數為偶數的頂點
- 在任何圖中,奇頂點的個數必為偶數
正則圖
若無向圖 \(G\) 的所有頂點的度數都是 \(r\) ,則稱 \(G\) 為 \(r\) 次正則圖
完全圖
完全圖:任何兩個頂點之間都有一條邊簡單無向圖,將 \(n\) 階完全圖記為 \(K_n\)
\(K_n\) 也是 \(n - 1\) 次正則圖,邊數為 \(\frac{n(n-1)}{2}\)
有向完全圖:任意兩頂點之間都恰有一條弧的簡單有向圖,也稱為 競賽圖 。(可以理解為帶方向的完全圖)
圖的同構
存在雙射\(\tau:V_1\to V_2\) 使得 \((u,v)\in E_1\) 當且僅當 \((\tau(u), \tau(v))\in E_2\),並且重數相同,則 \(G_1, G_2\) 同構。有向圖同理
同構圖的性質:
- 頂點數、邊數相同
- 對任意的自然數 \(k\) ,度數為 \(k\) 的頂點一樣多
- 自環數量相同
子圖
設 \(G_1=<V_1,E_1>\) 和 \(G_2=<V_2,E_2>\) 是兩個圖,若 \(V_1\subseteq V_2\) 且 \(E_1\subseteq E_2\) 則稱 \(G_1\) 為 \(G_2\) 的子圖,記為 \(G_1\subseteq G_2\)
若 \(G_1\subseteq G_2\) 且 \(G_1 \neq G_2\) ,則 \(G_1\) 是 \(G_2\) 的真子圖
補圖
\(E_2 = E - E_1\)
\(V_2=\{v|(v\in V\land\exists e(e\in E_2\land e與 v關聯))\lor(v\in V-V_1\land v是G中的孤立點)\}\)
- 邊只能在圖和補圖中出現一次
- 點可以出現多次
導出子圖和生成子圖
設 \(G_1=<V_1,E_1>\) 是 \(G=<V,E>\) 的子圖
導出子圖:\(E_1=\{e|e\in E\land e的端點在V_1中\}\)
生成子圖:\(V_1=V\)
去點運算:去掉頂點以及關聯的邊 \(G-v\)
去邊運算:僅去掉邊,\(G-e\)
加邊運算:\(G\) 中 \(u\) 和 \(v\) 不相鄰,增加邊 \((u,v)\):\(G+(u,v)\)
圖的並集:\(V=V_1\cup V_2,E=E_1\cup E_2\),則 \(G=G_1\cup G_2\)
連通性 - 通路
通路:有向圖中\(D=<V,A>\) 中,首尾相接的弧的序列 \(P=(a_1,a_2,\cdots,a_t)\) 稱為通路,且對於每個 \(i\), \(a_i\) 的終點是 \(a_{i+1}\) 的始點。通路中出現的弧的數目 \(t\) 為該通路的長度,記為 \(|P|=t\)
簡單通路:不出現相同弧的通路
基本通路:不出現相同頂點的通路
- 基本通路一定是簡單通路,簡單通路不一定是基本通路
- 基本通路的長度不超過 \(n - 1\)
連通性 - 回路
回路:始點和終點相同的通路
簡單回路:不出現相同弧的回路
基本回路:不出現相同頂點的回路
無回路圖:沒有回路的有向圖
- 基本回路的長度不超過 \(n\)
連通性 - 可到達
可到達:若存在 \(u\) 到 \(v\) 的通路,則稱 \(u\) 可到達 \(v\)
- 若從 \(u\) 可以到達 \(v\), 則存在從 \(u\) 到 \(v\) 的基本通路,且最短通路必是基本通路(回路同理)
半通路:每條弧都與后一條弧相鄰的弧的序列 \((a_1, a_2, \cdots, a_t)\) 稱為半通路。
- 通路是每條弧都從前向后的半通路
連接到:若存在 \(u\) 到 \(v\) 的半通路,則稱 \(u\) 連接到 \(v\)
連通性 - 強連通,單向連通,弱連通
強連通 / 3 度連通:任意兩點互相可達
單向連通 / 2 度連通:任意兩點,至少有一個方向可達
弱連通 / 1 度連通:任意兩點互相連接
不連通 / 0 度連通:不滿足弱連通,則稱為不連通
完備路
完備通路:通過有向圖中所有頂點的通路
完備回路:通過有向圖中所有頂點的回路
完備半通路:通過有向圖中所有頂點的半通路
- 強連通 \(\Leftrightarrow\) 有完備回路
- 單向連通 \(\Leftrightarrow\) 有完備通路
- 半連通 \(\Leftrightarrow\) 有完備半通路
鏈
鏈:無向圖中,每條邊都與隨后的那條邊相鄰的序列 \((e_1,e_2, \cdots,e_t)\),可記為頂點序列,長度 \(|P|=t\)
簡單鏈:各邊互不相同
基本鏈:各頂點互不相同
閉合鏈: \(u_1 = u_{t+1}\)
圈
\(u_1,\cdots,u_t\) 各不相同,且各邊互不相同的閉合鏈
連通分支
連通:若頂點 \(u\) 和 \(v\) 之間存在鏈,則稱 \(u\) 和 \(v\) 是連通的
連通分支:有連通關系構成的等價類所導出的子圖
- 圖 \(G\) 是連通的當且僅當 \(G\) 中只有一個連通分支
割點:\(G\) 連通,\(G-v\) 不連通,則 \(v\) 是割點
割邊:\(G\) 連通,\(G-e\) 不連通,則 \(e\) 是割邊 / 橋
頂點基和強分圖
可到達:對於有向圖 \(D=<V,A>, B\subseteq V\),\(v\in V\),若從 \(B\) 中的某個頂點可以到達 \(v\) ,則稱 \(B\) 可以到達 \(v\)。
頂點基:若 \(B\) 可到達 \(V\) 的所有頂點,且任何 \(B\) 的真子集都無法到達 \(V\) 中的每個頂點, 則稱 \(B\) 為 \(D\) 的一個頂點基
強分圖:\(D\) 是有向圖, \(D'\) 是 \(D\) 的強連通子圖,並且對於 \(D\) 的任意強連通子圖 \(D''\),若 \(D' \subseteq D''\) ,則 \(D'=D''\)。稱 \(D'\) 為 \(D\) 的強連通分圖, 或者強分圖。
(單向分圖,弱分圖同理)
- 每個頂點在唯一的強分圖中,每條弧至多在一個強分圖中
- 無回路有向圖有唯一的頂點基,由所有引入次數為 0 的點組成
- 每個頂點基包含同樣數目的頂點
壓縮
每個強分圖可以用一個點替代(縮點)
- \(D\) 的每一個頂點基都可以由可以由 \(D^*\) 的頂點基 \(B^*\) 得到(在 \(B^*\) 的每個元素中取出一個頂點)
通路問題
記通路的長度為 \(I(P)\) ,兩點之間的最短通路記為最短路 \(d(u,v)\)。最短通路可以用 Dijkstra 來求
工序圖
-
簡單帶權有向圖
-
沒有回路
-
有唯一的引入次數為 0 的點,稱其為發點
-
有唯一的引出次數為 0 的點,稱其為收點
-
每個頂點都在某條從發點到收點的通路上
-
每條弧的權都是非負實數
關鍵工序和關鍵事件
關鍵工序對應有向圖的邊
關鍵事件對應有向圖的點
關鍵事件和關鍵工序的延遲都會導致整個工程的延誤
關鍵時間和關鍵工序都位於關鍵通路中
關鍵通路
最早完成時間 \(TE\) :從發點 \(u_1\) 到 \(u_j\) 的最長通路的長度記為 \(u_j\) 的最早完成時間 (拓撲排序)
最遲完成時間 \(TL\) :在保證 \(u_n\) 的最早完成時間不變的前提下,到達事件 \(u_j\) 的最遲時間 (反着來一次拓撲排序)
緩沖時間 \(TS\) :\(TL-TE\)
- 關鍵通路上的所有事件的緩沖時間都是 0
圖的矩陣表示
鄰接矩陣
鄰接矩陣就是關鍵矩陣 \(M = (m_{ij})\)
鄰接矩陣也可以表示可達性:若在鄰接矩陣上, \(m_{ij}=1\) ,則表示從 \(u_i\) 到 \(u_j\) 存在一條長度為 \(1\) 的通路
求到達某個點的長度為 k 的路徑數量
考慮動態規划
長度為 \(k\) 的路徑,可以由長度為 \(k - 1\) 的路徑,加上長度為 \(1\) 的路徑組合而來
不妨設 dp[u][v][k] 表示 \(<u, v>\) 之間長度為 \(n\) 的路徑數量,則可以通過枚舉 \(m_{ij}\) 進行轉移
for(int t = 1;t <= n; ++t)
for(int u = 1;u <= n; ++u)
for(int v = 1;v <= n; ++v)
dp[u][v][k] += dp[u][t][k - 1] * m[i][j];
同時,我們也知道 \(dp[u][v][1] = m[u][v]\) ,而這三重循環恰好是進行了一次矩陣乘法
即:若記 \(dp[][][k] = dp^k\),則 \(dp^k=M^k\)
有向圖的可達性矩陣
可達性矩陣的元素只包含 \(0, 1\)。設為 \(R\),通過枚舉通路的長度,則有
其中 \(B(M) = (bool(m_{ij}))\),等號成立是因為只取結果只取 \(0, 1\) 與系數無關
強分圖
\(R\) 為可達性矩陣,記 \(R^2=(s_{ij})\) 則 \(s_{ii}\) 可以表示圖中可以到達 \(i\) 的頂點數量
關聯矩陣
有向圖的關聯矩陣:\(D=<V,A>\) ,\(n\) 個點 \(m\) 條邊。則 \(B=(b_{ij})_{n\times m}\)
無向圖的關聯矩陣:\(b_{ij}=e_i與u_i的關聯次數\),\(b_{ij}\in\{0,1,2\}\)
- 有向圖同構 \(\Leftrightarrow\) 適當排列頂點和弧的順序,可以得到同樣的鄰接矩陣和關聯矩陣
樹
連通且無圈的無向圖
樹的一般定義
設 \(T\) 是 \((n,m)\) 無向圖,則以下說法等價
- \(T\) 連通且無圈
- \(T\) 無自環,並且每對頂點之間有唯一基本鏈
- \(T\) 連通,在 \(T\) 中加一邊僅有一個圈
- \(T\) 連通,去掉任何一邊就不連通了
- \(T\) 連通,並且 \(m=n-1\)
- \(T\) 無圈,並且 \(m=n-1\)
樹葉:次數為 1 的頂點
分支頂點:次數大於 1 的頂點
非平凡樹中至少有兩個樹葉
有向樹
將一個樹的邊加上任意的方向,就構成了有向樹
有向樹是弱連通的無回路有向圖
弱連通的無回路有向圖不一定是樹
根樹
有向樹 \(T\) 中,有一個頂點引入次數為 0, 其余頂點的引入次數為 1,則稱 \(T\) 為根樹。
根樹中,引入次數為 0 的點為樹根,引出次數為 0 的點為樹葉
若指定了 頂點或弧的次序的根樹也稱為有序樹
二元樹
\(m\) 元樹:每個頂點的引出次數 小於等於 \(m\)
完全 \(m\) 元樹:每個頂點的引出次數等於 \(m\) 或 \(0\)
位置 \(m\) 元樹:每個頂點都規定了各兒子的順序的 \(m\) 元樹
一個有序樹可以轉變為位置二元樹:
- 左兒子為長子
- 右兒子為兄弟
生成樹
若無向圖 \(G\) 的生成子圖 \(T\) 是樹,則稱 \(T\) 為 \(G\) 的生成樹
所有生成樹中權值最小的稱為最小生成樹
(Kruskal算法)
割集
(類比最小割)
\(G=<V,E>, E'\subseteq E\),\(G-E'\) 不連通,且對任意的 \(E''\subset E\),\(G-E''\) 連通。則 \(E'\) 是割集
基本割集:只包含一個樹枝的割集
基本圈:只有一條弦,剩下的全為樹邊的圈
性質
- 每個圈都包含弦
- 每個割集都和任何生成樹有至少一條公共邊
- 任何圈和任何割集都有偶數條公共邊
穿程問題
歐拉圖
歐拉圈:穿過無向圖中每條邊的簡單閉合鏈位歐拉圈
歐拉圖:有歐拉圈的圖位歐拉圖
- 歐拉圈中邊不重復,但點可能重復,因此歐拉圈不一定是圈
歐拉鏈:穿過無向圖中每條邊的簡單非閉合鏈稱為歐拉鏈
- 歐拉鏈一般不是基本鏈
歐拉回路:穿過有向圖中每條弧的簡單回路稱為歐拉回路
歐拉圖:有歐拉回路的圖稱為歐拉圖
歐拉通路:穿過有向圖中每條胡的非閉合簡單通路位歐拉通路
性質
若無向圖 \(G\) 中每個頂點的次數大於 1,則在 \(G\) 中存在圈
連通無向圖 \(G\) 是歐拉圖當且僅當 \(G\) 的每個頂點都是偶頂點
連通無向圖 \(G\) 中存在連接頂點 \(u,v\) 的歐拉鏈當且僅當只有 \(u\) 和 \(v\) 是奇頂點
強連通圖有向圖 \(D\) 是歐拉圖當且僅當 \(D\) 中的每個頂點的引入次數和引出次數相同
單向連通有向圖 \(D\) 有從頂點 \(u\) 到 \(v\) 的歐拉通路當且僅當 \(u\) 的引出次數比引入次數大 1, \(v\) 的引入次數比引出次數大 1, \(D\) 中其他頂帶你引入次數和引出次數相同
哈密頓圖
哈密頓圈:穿過無向圖 \(G\) 中每個點一次且僅一次的圈位哈密頓圈
哈密頓回路:穿過有向圖 \(G\) 中每個頂點的基本回路為哈密頓回路
哈密頓圖:有 哈密頓圈 或 哈密頓回路 的圖稱為哈密頓圖
哈密頓鏈:穿過無向圖 \(G\) 中每個頂點的基本鏈為哈密頓鏈
哈密頓通路:穿過有向圖 \(G\) 中每個頂點的基本通路為哈密頓通路
性質
有哈密頓圖的必要條件: \(p(G-U)\leq|U|\)
有哈密頓鏈的必要條件:\(p(G-U)\leq|U|+1\)
有哈密頓鏈的充分條件:不相鄰頂點的次數之和 \(\geq n - 1\)
有哈密頓圖的充分條件:不相鄰頂點的次數之和 \(\geq n\)
有向完全圖中必存在哈密頓通路
強連通的有向完全圖中必存在哈密頓回路
二分圖匹配問題
基本概念
二分圖:設 \(G=<V,E>\) 是無向圖,若可以將 \(V\) 分成兩個非空子集 \(X\) 和 \(Y\) ,並且使得同一子集中的任何兩個頂點都互不鄰接,則稱 \(G\) 為二分圖。
-
只有一個頂點的圖不是二分圖
-
若非平凡圖 \(G\) 的每個連通分量都是二分圖或平凡圖,則 \(G\) 是二分圖
-
互補頂點子集分別有 \(p\) 個頂點和 \(q\) 個頂點的完全二分圖記為 \(K_{p,q}\)
匹配:設 \(G=<V,E>\) 是二分圖, \(M\subseteq E\) ,若 \(M\) 中任意兩條邊不相鄰,則稱 \(M\) 為 \(G\) 的匹配
性質
若無向圖 \(G\) 中有長度為奇數的閉合鏈,則在 \(G\) 中有長度為奇數的圈
非平凡無向圖 \(G\) 是二分圖當且僅當 \(G\) 中的每個圈的長度都是偶數
二分圖最大匹配
最大匹配:邊數最多的匹配
交錯鏈:設 \(M\) 是二分圖 \(G\) 的匹配, \(P\) 是 \(G\) 中的基本鏈,若 \(P\) 中任何相鄰的兩條邊中恰有一條屬於 \(M\) ,則稱 \(P\) 為關於 \(M\) 的交錯鏈
飽和頂點與非飽和頂點:設 \(M\) 是二分圖 \(G\) 的匹配,稱與 \(M\) 中的邊關聯的頂點為 \(M\) 的飽和頂點,稱不與 \(M\) 中任何邊關聯的頂點為 \(M\) 的非飽和頂點。
可擴充鏈:兩個端點都是匹配 \(M\) 的非飽和頂點的交錯鏈
性質
二分圖 \(G=<V,E>\) 的匹配 \(M\) 是最大匹配當且僅當 \(G\) 中不存在關於 \(M\) 的可擴充鏈
從 X 到 Y 的匹配
設 \(X\) 和 \(Y\) 是二分圖 \(G\) 的互補頂點子集, \(M\) 是 \(G\) 的匹配。若 \(X\) 中每個頂點都是 \(M\) 的飽和頂點,即是 \(M\) 中某條邊的端點,則稱 \(M\) 為從 \(X\) 到 \(Y\) 的匹配。
