二分图最大匹配
最近學習了二分圖的最大匹配問題,這是圖論的第一個專題,做了些基礎題,感覺就是萬變不離其宗,(可能是因為都是基礎題的緣故吧。。。。瞬間覺得有成就感,被dp虐的好慘,
不過這樣才能培養思維,前期做的都是模板題,智商下降好多,該好好想象了!!!)
總結一下:
? ? 首先圖是什么?
? ? ? ? ? ? 圖是表示一些事物或狀態的關系的表示方法。圖是由頂點和邊組成 。頂點表示對象。在示意圖中,我們使用點或圓來表示。
? ? ?邊表示的是兩個對象的連接關系。在示意圖中,我們使用連接兩頂點之間的線段來表示。
? ? ? ? ? ? ? ? ??
? ? ?圖的種類:
? ? ? ? ? 圖大體上分為兩種。邊沒有指向性的圖叫做無向圖,邊具有指向性的叫做有向圖。如:表示朋友關系的圖(頂點表示人,邊表示朋友關系的圖)和路線圖都是無向圖。表示
數值的大小關系的圖(頂點表示數值,A>B時從A向B連一條邊得到的圖)和流程圖是有向圖。
? ? ? ? ???
? ? ? ? 我們可以給邊賦予各種各樣的屬性。比較具有代表性的有權值。邊上帶有權值的圖叫做帶權圖。
? 二。無向圖的術語
? ? ? 兩個頂點之間有邊連接,我們就示為這兩個頂點相鄰。
? ? ? 相鄰頂點的序列稱為路徑。
? ? ? 起點和終點重合的路徑稱為圈。
? ? ? 任意兩點之間都有路徑連接的圖叫做連通圖。
? ? ? ?頂點連接的邊叫做頂點的度。
? ? ? ?
? ? ? ?沒有圈的連通圖叫做樹,沒有圈的非連通圖叫做森林。
? ? ? ?一棵樹的邊數恰好是:頂點數-1. 反之,邊數等于頂點數-1的連通圖就是一棵樹。
三。有向圖的術語
有向圖的入度:前一個頂點發出的一條指向當前頂點的一條邊是當前頂點的一個入度。
有向圖的出度: 當前頂點發出的指向后繼頂點的有向邊叫做當前頂點的一個出度。
DAG(有向無環圖):沒有圈的有向圖叫做DAG。
? ? 圖的表示:
? ? ? ? ?圖問題有兩種表示方式:1)鄰接矩陣,2)鄰接表。
? ? 1)鄰接矩陣:
? ? ? 其中鄰接矩陣表示方式我感覺最簡單,就是開一個二維數組G[i][j]表示頂點i和頂點j的關系。
? ? ? 由于在無向圖中,只需知道“頂點i和頂點j之間是否有邊連著” 這樣的信息,因此如果頂點i和頂點j相連,我們就將G[i][j]和G[j][i]置1,否則置零。
? ? ?使用鄰接矩陣的好處是可以在常數時間內判斷兩點之間是否有邊存在,但需要花費O(|V|平方)的空間,這在邊很少的稀疏圖里十分浪費。
? ?2)鄰接表:
? ??用鄰接矩陣表示稀疏圖會浪費大量的內存空間。而在鄰接表中,是通過把“從頂點0出發有到頂點2,4,5的邊”這樣的信息保存在鏈表中來表示圖的。
? ? ?
? ? 一種鄰接表的實現方式:
? ? ? ?
1 vector<int> G[maxn]; 2 /* 3 *邊上有屬性的情況 4 *struct edge{ int to,cost;} 5 *vector<edge> G[maxn]; 6 */ 7 int main() 8 { 9 int V,E; 10 scanf("%d%d",&V,&E); 11 for(int i=0;i<E;i++) 12 { 13 int s,t;// 從s向t連邊 14 scanf("%d%d",&s,&t); 15 G[s].push_back(t); 16 //如果是無向圖還需要從t向s連邊 17 } 18 /* 19 圖的操作; 20 */ 21 return 0; 22 }累死了。。。
轉載于:https://www.cnblogs.com/forwin/p/4974184.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 从0 开始 WPF MVVM 企业级框架
- 下一篇: 正则表达式实现将html文本转换为纯文本