標簽 OI考點梳理
個人相關
總結.
OI歷程.
題目
基礎題.
綜合題.
原創題.
考點
註意是考點不是知識點, 知識點才沒有這麽散亂呢QAQ.
線性代數.
行列式求值.
Matrix-tree定理.
Lindstrom-Gessel-Viennot引理.
高斯消元.
線性基.
特征值.
矩陣乘法.
數論.
## **一、參考資料**<https://blog.sengxian.com/algorithms/networkflow-variants><http://www.matrix67.com/blog/archives/116><http://dsqiu.iteye.com/blog/1689505>
## **二、匹配,邊覆蓋,獨立集,點覆蓋之間的三組關系及原理**### **(一)最大匹配與最小邊覆蓋**  對於任意連通圖,有: $$|M_\max|+|F_\min|=|V|$$   用中文描述就是: $最大匹配數+最小邊覆蓋數=頂點數$
**證明:**  若在邊覆蓋集中新增一條邊,則有三種情況:① 當邊的兩端都被覆蓋時,多覆蓋了 $0$ 個點② 當邊一端覆蓋一端未覆蓋時,多覆蓋了 $1$ 個點③ 當邊的兩端都未被覆蓋時,多覆蓋了 $2$ 個點
  由於我們要用最小的邊,覆蓋所有的 $n$ 個點,所以每次覆蓋的邊肯定越多越好。  能覆蓋 $2$ 個點的邊就是最大匹配,接下來,對於每個沒有被覆蓋的點,找到一條它與被覆蓋的點的連邊,把這條邊連起來就好了。
  所以 $|F_\min|=(|V|-2*|M_\max|)+|M_\max|$   所以 $|M_\max|+|F_\max|=|V|$
### **(二)最大獨立集與最小點覆蓋的關系**  對於任意圖,有:$$S_\max\cup S_\min=V$$  數量化之後,有$$|S_\max|+|S_\min|=|V|$$  用中文描述就是:在點集 $V$ 中,最大獨立集 $S_\max$ 與最小點覆蓋 $S_\min$ 互補
**證明:**  對於一個獨立集 $P$ ,設它在 $V$ 中的補集為 $Q$ 。  根據獨立集的定義, $P$ 中的節點兩兩不相鄰,所以與 $P$ 中節點相連的邊對應的節點一定在補集 $Q$ 中。而還有一種類型的邊,就是兩個點都在補集 $Q$ 中。  所以,對於每條邊,它一定至少有一個端點在補集 $Q$ 中,即 $Q$ 是一個點覆蓋集。  所以對於任意一個獨立集,**有且僅有**一個點覆蓋集與其互補。  所以當且僅當獨立集為最大獨立集時,最大獨立集的補集為最小點覆蓋。
### **(三)二分圖中最大匹配與最小點覆蓋的關系(K?nig定理)****K?nig定理:**在二分圖中,有$$|M_\max|=|S_\min|$$用中文描述就是,最大匹配數=最小點覆蓋數
**證明:**  首先提出構造方法。  進行二分圖最大匹配,對於右端所有沒被匹配的點,找增廣路,將點進行標記。  最小點覆蓋為左端所有被標記的點,和右端所有未被標記的點。
  **為什麽點的個數等於最大匹配數?**這是因為,在我們選取的點集中,每個點都在一個匹配上,且每個匹配上只有一個點集上的點。即:最大匹配上的每一條邊有且僅有一個點集中的點。
  **為什麽點集為點覆蓋集?**即證明:不存在一條邊,左邊的點為被標記,右邊的點被標記。  假設存在一條邊,左邊的點為被標記,右邊的點被標記,分類討論:當這條邊是匹配邊時,必然是從左走到右,既然左邊沒有被標記,那麽右邊也不能被標記;當這條邊未被匹配時,必然是從右走到左,既然右邊被標記了,那麽就可以走到左邊啊。所以不存在。
  **為什麽點覆蓋集最小?**  這是因為,我們既然有了最大匹配的邊數$M$,則至少有$2M$個點,所以至少要用$M$個點來覆蓋。所以取到了下限。
  綜上,有 $|F_\max|=|S_\min|$
## **三、二分圖最大匹配****【構造方法】【計數方法】**Hungary算法```c++#define rep(i,a,b) for (int i=(a);i<=(b);i++)
int mp[N][N];int used[N],att[N];int res;
int Hungary(int x) {rep(nx,1,n)if (!used[nx]&&mp[x][nx]) {used[nx]=1;if (!att[nx]||Hungary(att[nx])) {att[nx]=x;return 1;}}return 0;}
void Match(void) {rep(i,1,n) {memset(used,0,sizeof used);Hungary(i);}res=0;rep(i,1,n)res+=(att[i]>0);printf("%d\n",res);}```
## **四、二分圖最小邊覆蓋****【計數方法】** $|F_\min|=|V|-|M_\max|$ ,只需要求二分圖最大匹配即可;**【構造方法】**① 求二分圖最大匹配,最大匹配的邊全部都要取② 然後對於沒有被匹配的點,選取一條它與被匹配的點相連的邊
## **五、二分圖最小點覆蓋****【計數方法】** $|S_\min|=|M_\max|$**【構造方法】**① 二分圖最大匹配② 對於右邊所有沒有被匹配的點,嘗試找增廣路,把遍歷的點進行標記③ 點覆蓋集為:左邊被標記的點+右邊未被標記的點
## **六、二分圖最大獨立集****【計數方法】** $|S_\max|=|V|-|S_\min|=|V|-|M_\max|$**【構造方法】**求出最小點覆蓋,取補集。
## **七、二分圖最大團****【計數方法】** $最大團的大小=補圖的最大獨立集$**【構造方法】** 補圖的最大獨立集
## **八、最小路徑覆蓋問題****【定義】**在圖 $G$ 中,用最少的路徑覆蓋所有的點為了方便表示,記最小路徑覆蓋數為 $T_\min$
**【建模】**在圖 $G$ 中,將每個點 $i$ 拆成兩個點 $x_i,y_i$ ,構成二分圖,若 $(u,v)\in E$ ,則把 $x_u$ 向 $y_v$ 連接一條邊。若要求路徑不交叉,則直接連接;若路徑可以交叉,則應該先用Floyd求解傳遞閉包。**【計數方法】** $$|T_\min|=|V|-|M_\max|$$ **【構造方法】**  進行二分圖最大匹配,若 $x_u$ 向 $y_v$ 連接了一條邊,說明有 $u->v$ 的路徑。
標簽 OI考點梳理