int n; int mp[N][N]; int linker[N]; bool used[N]; bool dfs(int a) { for(int i=0;i<n;i++) if(mp[a][i]&&!used[i]) { used[i]=true; if(linker[i]==-1||dfs(linker[i])) { linker[i]=a; return true; } } return false; } int hungary() { int result=0; memset(linker,-1,sizeof(linker)); for(int i=0;i<n;i++) { memset(used,0,sizeof(used)); if(dfs(i)) result++; } return result; } //记得初始化mp。。邝斌的板子
找出一个最大的集合使得该集合的任意两个人木有关系。
根据最大独立集 =顶点数 - 最大匹配数
hdu 1068
二分图的最小顶点覆盖数=最大匹配数
hdu 1150
DAG图(无回路有向图)的最小路径覆盖
hdu1151