圖,有有向圖,無向圖,稠密圖,簡單圖······
算法,有貪心法,二分法,模擬法,倍增法······
那,二分圖是啥?
二分法+有向圖?

於是,我查了許多資料,才對它有一定了解。
二分圖:二分圖,是圖論中的一種特殊模型,設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";
下一章我們將講到二分圖的匹配,我們明天見。
