二分图搞法
匈牙利算法
int dfs(int x) {for(int i=1;i<=m;i++){if(!used[i]&&g[x][i]){used[i]=1;if(link[i]==-1||dfs(link[i])){link[i]=x;return 1;}}}return 0; }//用roll的話說就是,找女朋友,如果當前女生已經有男朋友了,就讓這個男生去找另外一個女朋友,直到大家都找到為止。若找不到 這個點就沒法匹配了。void solve() {int ans=0;memset(link,-1,sizeof(link));for(int i=1;i<=n;i++){memset(used,0,sizeof(used));if(dfs(i)) ans++;}printf("%d\n",ans); }二分圖的最小頂點覆蓋數 = 二分圖的最大匹配數
DAG(無回路有向圖) 中
DAG圖的最小路徑覆蓋數 = 節點數- 最大匹配數
二分圖的最大獨立集數 = 節點數 — 最大匹配數
最小點權覆蓋: 拆點變成最小割,然后用最大流求解。
最大點權獨立集:總權值-最小點權獨立集
轉載于:https://www.cnblogs.com/yigexigua/p/3902515.html
總結
- 上一篇: linux 空间不够了,怎么办?Disk
- 下一篇: Hibernate映射关系之一对多