圖論——二分圖1:二分圖以及判定


 

圖,有有向圖,無向圖,稠密圖,簡單圖······

算法,有貪心法,二分法,模擬法,倍增法······

 

那,二分圖是啥?

二分法+有向圖?

 

 

於是,我查了許多資料,才對它有一定了解。

 

二分圖:二分圖,是圖論中的一種特殊模型,設G=(V,E)是一個無向圖,如果頂點V可分割為兩個互不相交的子集(A,B),並且同一集合中不同的兩點沒有邊相連。

這就是二分圖。

 

舉個栗子吧:

 

 

這是不是二分圖?

反正我第一次看覺得不是

其實,是的,他是二分圖,盡管看上去是連着的。

 

若我們將圖中的一些邊轉一下,變成:

 

這就是一個明顯的二分圖。

集合A與B中的點互不相連。

 

因此,在手動判定二分圖時學會轉邊!

 

辣魔,二分圖要用計算機判定怎么實現?

 

數競大佬:簡單!

!!!染色大法!!!

 

 

有沒有熟悉的感覺

 

0表示還未訪問,1表示在集合A中,2表示在集合B中。

 

col(color)儲存顏色。

初始化為0.

上代碼:

 

 其實是模板

可以記憶。

 1 vector <int> v[N];
 2 void dfs(int x,int y){
 3   col[x]=y;            
 4   for (int i=0; i<v[x].size(); i++) {
 5      if (!col[v[x][i]]) dfs(v[x][i],3-y);
 6      if (col[v[x][i]]==col[x]) FLAG=true;      //產生了沖突
 7   }
 8 }
 9 for (i=1; i<=n; i++) col[i]=0;    //初始化
10 for (i=1; i<=n; i++) if (!col[i]) dfs(i,1);    //dfs染色
11 if (FLAG) cout<<"NO"; else cout<<"YES";

 

下一章我們將講到二分圖的匹配,我們明天見。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM