图论部分简单总结
總的感受:
這里大概囊括了一下圖論的基礎知識,圖論是一個比較考驗思維的部分。
尤其是后面有關二分圖,網絡流等的分支,對建模轉化的要求還是很高的。
進入正題了:
一、最短路:
這一個部分不想多講,雖然是很基礎的一個部分,但是也很重要。
題目:
1、Telephone Lines。p.s:二分答案+最短路。
2、Roads and Planes。p.s:Topo序+dijkstra。
3、Cow Relays。p.s:Floyd+矩陣乘法。
三連擊
二、最小生成樹:
基礎算法的話也不多講了。主要是其實有些這種類型的題也很考驗思維。。。
題目:
1、picnic planning。 p.s:最小生成樹+枚舉。
三、樹的直徑與LCA:
樹的直徑求法: ① 樹形DP。 ②兩遍BFS/DFS。
LCA的求法: ①樹上倍增。 ②Tarjan+并查集(離線)。
這一類型的題目,一般需要能夠發現隱藏在題目中的一些優秀的性質,然后和這些東西掛上聯系,然后就很舒服了(有前提的略略略)。
題目:
1、APIO2010巡邏 p.s:分類討論+樹的直徑。 題解傳送門
2、NOIP2007樹網的核 p.s:分析性質+樹的直徑。 題解傳送門
3、POJ3417Network p.s:問題轉化+樹上差分。 題解傳送門
4、SDOI2015尋寶游戲 p.s:dfs序+set(虛樹??!!)題解傳送門
5、嚴格次小生成樹 p.s:最小生成樹+樹上倍增。題解傳送門
6、NOIP2012疫情控制 p.s:二分答案+貪心+樹上倍增。題解傳送門
四、基環樹
一般用來作為樹問題的擴展。。解決基環樹問題常用思路:一般先考慮樹,然后掛上一條邊后產生的影響(和沒說一樣)。。。
1、IOI2008Island p.s:基環樹直徑。題解傳送門
五、負環與差分約束系統
負環的判定spfa不多聊。
講下差分約束系統:
這是一種特殊的N元不等式組,它的N個變量a1...aN,滿足一些形如下的約束:
ai-aj<=bkai==ajai-aj>=bk...然后需要解決的問題就是求一組解使得上述約束全部滿足。
可以發現上述的式子和最短路需要滿足的三角形不等式:dis[y]<=dis[x]+ver(x,y)十分相似。
那么我們可以考慮到把這些約束看作是兩兩變量之間的邊,相對應的跑最短(長)路即可。
具體一點,
對于形如:ai-aj<=ck的式子,我們可以轉換成ai<=aj+ck。
那么就相當于向j往i連了一條長為ck的邊,那么對應的跑最短路即可。特殊的:如果存在負環無解
而對于形如:ai-aj>=ck的式子,就轉換成ai>=aj+ck,可以發現只需將最短路改成最長路即可。
題目:
咕咕咕。。。
六、Tarjan與圖的連通性
無向圖橋(割邊)判定:
low[y]>dfn[x];無向圖割點判定:
low[y]>=dfn[x]; //需要注意的是需要判斷根節點的特殊情況...無向圖邊雙連通分量(e-DCC)求法:
把所有的橋去掉后得到的所有的連通塊都是一個e-DCC。無向圖點雙連通分量(v-DCC)求法:
把所有的割點去掉后得到的所有的連通塊都是一個v-DCC???。
并不是。。。一定不能亂來啊233
事實上可以發現一個割點可能出現在多個v-DCC中。
這個時候就按照割點判斷法則來,把用一個棧維護起來的點一個個彈出,他們組成一個v-DCC。同時,需要把割點的標記清空,因為后續它還有可能出現在別的v-DCC中。e-DCC的縮點比較常規,需要注意的是v-DCC的縮點,新的圖應該包括了每一個v-DCC和每一個割點。
有向圖強連通分量(SCC)的求法:對于每一個點,若存在:
low[x]==dfn[x];那么把棧中維護的元素彈到x為止。
SCC的縮點也比較常規。
有向圖的必經點和必經邊。
注意:此處不考慮有環的情況。對于有環的情況請自行了解支配樹。
既然沒有環,可以直接正反兩次進行Topo排序。
記錄到x路徑條數,不妨設從S到x路徑條數為f[x],從x到T路徑條數為t[x]。
① 如果對于一條有向邊(x,y)。如果滿足:
f[x]*t[y]==f[T];則此邊為必經邊。
② 如果對一個點x。如果滿足:
f[x]*t[x]==f[T];則此點為必經點。
題目:
1、POI2008BLO p.s:割點。題解傳送門
2、Knights of the Round Table p.s:點雙連通分量+奇環。題解傳送門
七、2-SAT問題
對于N個變量,每個變量只有兩種取值。然后有M個條件,每個條件是關于兩個變量取值的限制。
問能否找到一組合法的賦值方案使得M個條件都滿足。
判定是否合法的方法:
首先,對這N個點建一張2N個點的圖,i和i+N對應的點i的兩個取值。
然后,根據每一個條件連有向邊,(一般需要轉一下思維)。
最后,tarjan縮強連通分量,如果任意一個SCC內存在i,i+N,那么就不合法。否則合法。
求一組合法賦值方案的方法:
這是個人理解:由于選擇一個零出度點,不會對其他點造成影響。
所以:
1、我們可以建反圖Topo序,相當于在原圖自底向上進行Topo。
每遇到一個沒有確定賦值的點,就給它和它對應的點賦值。2、由于我們發現tarjan縮點得到的每一個SCC的順序正好是自底向上的,所以我們可以直接賦值。
val[i]=c[i]>c[opp[i]];//c是強連通分量編號...//i代表xi,0,opp[i]代表xi,1...八、二分圖和網絡流
定義:一張沒有奇環的無向圖是二分圖。
二分圖判定方法:dfs染色。若存在相鄰兩個點,他們的顏色相同,那么就存在奇環。
最大匹配求法:① 匈牙利算法 ② 網絡流。
完備匹配:一張圖具有完備匹配,當且僅當兩邊的點都為N個,且最大匹配為N。
多重匹配:在最大匹配的基礎上,點可以連不超過一特定限制數量的另一側的點。
最大帶權匹配:邊有邊權,在最大匹配的前提下,使權值和最大。
最大帶權匹配求法:① KM算法 ② 費用流。
需要注意的是:KM算法僅僅適用于二分圖具有完備匹配,所以一般都是費用流。
二分圖最小點覆蓋:等于最大匹配數。
簡略證明一下:
首先,由于每條匹配邊都肯定需要至少取一個端點,所以不可能小于最大匹配數。因此只需要給出一組構造,使得點數等于最大匹配數即可。構造如下:首先,先求出二分圖最大匹配。然后,對于每一個左部非匹配點在進行一次尋找增廣路的過程,(必然失敗),同時進行訪問標記。最后,選出左部未訪問的節點和右部訪問了的節點,這些點構成一組點數為最大匹配數的最小點覆蓋。原因:左部的非匹配點顯然都被標記了,右部的非匹配點肯定沒被標記,一對匹配點要么同時被標記要么同時沒被標記。那么:1、匹配邊都被覆蓋了,因為恰好每條匹配邊只取了一個點。2、兩個端點都是非匹配點的情況不存在,與最大匹配矛盾。3、左部是非匹配點,右側是匹配點的非匹配邊被覆蓋了。4、右部是非匹配點,左側是匹配點的非匹配邊,左部點一定沒被訪問,所以也被覆蓋了。證畢。
二分圖最大獨立集:等于總點數-最小覆蓋,即也等于總點數-最大匹配。
證略。
網絡流初步:
最大流:EK算法,dinic算法(當前弧優化)。
最小割:最小割等于最大流。
費用流:spfa-EK費用流。
題目:
1、Ants p.s:二分圖帶權最小匹配。題解傳送門
2、網絡流24題 No p.s...題解傳送門
最后的最后
蒟蒻的圖論部分就到此結束了,有些地方講的有點含糊不清,請多包容。
上述題解會很快跟上的。。。(希望別咕掉了@ο@)
The Real End
轉載于:https://www.cnblogs.com/Bhllx/p/10610275.html
總結
- 上一篇: Pycharm 项目无法导入自己写的模块
- 下一篇: flex 点击空格键会有以前点击过的事件